Skip to content

Commit 0f21dd9

Browse files
committed
🎉 Initial commit: IPA Signer Tool
✨ Features: - Cross-platform IPA signing with Qt6 GUI & CLI - Automatic P12 to Keychain certificate matching - Smart bundle ID adaptation for wildcard provisions - Complete framework/dylib signing support - Web interface for remote signing - GitHub Actions CI/CD pipeline 🛠️ Tech stack: C++17, Qt6, OpenSSL, libzip, libplist, Python FastAPI
0 parents  commit 0f21dd9

23 files changed

+2398
-0
lines changed

.github/workflows/build.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Build IPA Signer
2+
3+
on:
4+
push:
5+
branches: [ CyberTK ]
6+
pull_request:
7+
branches: [ CyberTK ]
8+
release:
9+
types: [ published ]
10+
11+
jobs:
12+
build-macos:
13+
runs-on: macos-latest
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Install dependencies
19+
run: |
20+
brew update
21+
brew install qt6 cmake openssl libzip libplist
22+
23+
- name: Create build directory
24+
run: mkdir build
25+
26+
- name: Configure CMake
27+
working-directory: build
28+
run: |
29+
cmake .. \
30+
-DCMAKE_BUILD_TYPE=Release \
31+
-DCMAKE_PREFIX_PATH=$(brew --prefix qt6)
32+
33+
- name: Build
34+
working-directory: build
35+
run: make -j$(sysctl -n hw.ncpu)
36+
37+
- name: Test build
38+
working-directory: build
39+
run: |
40+
ls -la ipasigner
41+
./ipasigner --help || echo "Help command completed"
42+
43+
- name: Create release package
44+
if: github.event_name == 'release'
45+
run: |
46+
mkdir -p release/IPA-Signer
47+
cp build/ipasigner release/IPA-Signer/
48+
cp README.md LICENSE release/IPA-Signer/
49+
cd release
50+
tar -czf IPA-Signer-macOS.tar.gz IPA-Signer/
51+
52+
- name: Upload release asset
53+
if: github.event_name == 'release'
54+
uses: actions/upload-release-asset@v1
55+
env:
56+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57+
with:
58+
upload_url: ${{ github.event.release.upload_url }}
59+
asset_path: ./release/IPA-Signer-macOS.tar.gz
60+
asset_name: IPA-Signer-macOS.tar.gz
61+
asset_content_type: application/gzip
62+
63+
- name: Upload build artifact
64+
if: github.event_name != 'release'
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: ipasigner-macos
68+
path: build/ipasigner

.gitignore

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Build artifacts
2+
build/
3+
CMakeFiles/
4+
CMakeCache.txt
5+
cmake_install.cmake
6+
Makefile
7+
*.make
8+
ipasigner
9+
10+
# Qt specific
11+
.qt/
12+
moc_*.cpp
13+
qrc_*.cpp
14+
ui_*.h
15+
*.pro.user*
16+
17+
# macOS specific
18+
.DS_Store
19+
.AppleDouble
20+
.LSOverride
21+
22+
# iOS files - DO NOT COMMIT THESE
23+
*.ipa
24+
*.mobileprovision
25+
*.p12
26+
*.pem
27+
*.key
28+
*.crt
29+
*.cer
30+
31+
# Python
32+
__pycache__/
33+
*.py[cod]
34+
*$py.class
35+
venv/
36+
env/
37+
38+
# Logs
39+
*.log
40+
41+
# Temporary files
42+
*.tmp
43+
*.temp
44+
*.part
45+
*.zip
46+
47+
# Personal certificates and keys
48+
certificates/
49+
profiles/
50+
keys/
51+
52+
# IDE
53+
.vscode/
54+
.idea/
55+
*.swp
56+
*.swo
57+
*~
58+
59+
# OS generated files
60+
Thumbs.db
61+
ehthumbs.db
62+
63+
# Backup files
64+
*.bak
65+
*.backup
66+
67+
# Test files
68+
test_*.ipa
69+
sample_*.ipa

CMakeLists.txt

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
project(IPASigner)
3+
4+
set(CMAKE_CXX_STANDARD 17)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6+
7+
# Executable'ı proje kök dizinine kopyala
8+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
9+
10+
# Gerekli kütüphaneleri bul
11+
find_package(OpenSSL REQUIRED)
12+
find_package(ZLIB REQUIRED)
13+
find_package(libzip REQUIRED)
14+
15+
# libplist için manuel yapılandırma
16+
set(PLIST_INCLUDE_DIRS "/opt/homebrew/include")
17+
set(PLIST_LIBRARIES "/opt/homebrew/lib/libplist-2.0.dylib")
18+
19+
# Qt6 ekle
20+
find_package(Qt6 COMPONENTS Widgets REQUIRED)
21+
set(CMAKE_AUTOMOC ON)
22+
set(CMAKE_AUTORCC ON)
23+
set(CMAKE_AUTOUIC ON)
24+
25+
# Kaynak dosyaları
26+
set(SOURCES
27+
src/main.cpp
28+
src/ipasigner.cpp
29+
src/certificate.cpp
30+
src/provision.cpp
31+
src/gui.cpp
32+
src/signworker.cpp
33+
src/installworker.cpp
34+
)
35+
36+
# Header dosyaları
37+
set(HEADERS
38+
include/ipasigner.h
39+
include/certificate.h
40+
include/provision.h
41+
include/gui.h
42+
include/signworker.h
43+
include/installworker.h
44+
)
45+
46+
# Executable oluştur
47+
add_executable(ipasigner ${SOURCES} ${HEADERS})
48+
49+
# Include dizinleri
50+
target_include_directories(ipasigner PRIVATE
51+
${CMAKE_CURRENT_SOURCE_DIR}/include
52+
${OPENSSL_INCLUDE_DIR}
53+
${ZLIB_INCLUDE_DIRS}
54+
${LIBZIP_INCLUDE_DIRS}
55+
${PLIST_INCLUDE_DIRS}
56+
)
57+
58+
# Kütüphaneleri bağla
59+
target_link_libraries(ipasigner PRIVATE
60+
Qt6::Widgets
61+
${OPENSSL_LIBRARIES}
62+
${ZLIB_LIBRARIES}
63+
/opt/homebrew/lib/libzip.dylib
64+
${PLIST_LIBRARIES}
65+
"-framework Security"
66+
"-framework CoreFoundation"
67+
)

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 IPA Signer Tool
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)