├── .gitattributes ├── .gitignore ├── BuildDeb.command ├── BuildDebForTest.command ├── DEBIAN ├── control ├── postinst └── postrm ├── Entitlements.plist ├── README.md ├── permasigneriOS.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ │ └── Package.resolved │ └── xcuserdata │ │ └── xiaobowen.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ ├── chara.xcuserdatad │ └── xcschemes │ │ └── xcschememanagement.plist │ └── xiaobowen.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ └── xcschememanagement.plist └── permasigneriOS ├── Assets.xcassets ├── AccentColor.colorset │ └── Contents.json ├── AppIcon.appiconset │ ├── 1024.png │ ├── 120-1.png │ ├── 120.png │ ├── 152.png │ ├── 167.png │ ├── 180.png │ ├── 20.png │ ├── 29.png │ ├── 40-1.png │ ├── 40-2.png │ ├── 40.png │ ├── 58-1.png │ ├── 58.png │ ├── 60.png │ ├── 76.png │ ├── 80-1.png │ ├── 80.png │ ├── 87.png │ └── Contents.json ├── Contents.json ├── GithubIcon.imageset │ ├── 25231.png │ └── Contents.json ├── Lakr233PFP.imageset │ ├── Contents.json │ ├── LakrPFP-1.png │ ├── LakrPFP-2.png │ └── LakrPFP.png ├── Linus HenzePFP.imageset │ ├── Contents.json │ ├── LinusPFP-1.png │ ├── LinusPFP-2.png │ └── LinusPFP.png ├── PaisseonPFP.imageset │ ├── Contents.json │ ├── PaisseonPFP-1.png │ ├── PaisseonPFP-2.png │ └── PaisseonPFP.png ├── PowenPFP.imageset │ ├── Contents.json │ ├── PowenPFP-1.png │ ├── PowenPFP-2.png │ └── PowenPFP.png ├── ZhuoweiPFP.imageset │ ├── Contents.json │ ├── ZhouweiPFP-1.png │ ├── ZhouweiPFP-2.png │ └── ZhouweiPFP.png ├── fullpwnPFP.imageset │ ├── Contents.json │ ├── newishPFP-1.png │ ├── newishPFP-2.png │ └── newishPFP.png └── itsnebulalolPFP.imageset │ ├── Contents.json │ ├── NebulaPFP-1.png │ ├── NebulaPFP-2.png │ └── NebulaPFP.png ├── ButtonStyle.swift ├── CheckApp.swift ├── DirectoryPath.swift ├── Extensions.swift ├── Info.plist ├── Launch Screen.storyboard ├── OpenInFilza.swift ├── PackToDeb.swift ├── Preview Content └── Preview Assets.xcassets │ └── Contents.json ├── Resources ├── Plist.sh ├── control ├── dev_certificate.p12 ├── entitlements.plist ├── postinst └── postrm ├── Views ├── AppInfoView.swift ├── ContentView.swift ├── CreditsView.swift └── SignView.swift └── permasigneriOSApp.swift /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | *.DS_Store 3 | *.xcuserstate 4 | *.deb -------------------------------------------------------------------------------- /BuildDeb.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | cd "$(dirname "$0")" 6 | 7 | WORKING_LOCATION="$(pwd)" 8 | APPLICATION_NAME="permasigneriOS" 9 | 10 | rm -rf build *.deb || true 11 | mkdir build 12 | 13 | cd build 14 | 15 | rm -rf dpkg || true 16 | mkdir dpkg 17 | 18 | echo "[*] starting build..." 19 | 20 | xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ 21 | -scheme "$APPLICATION_NAME" \ 22 | -configuration Release \ 23 | -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ 24 | -destination 'generic/platform=iOS' \ 25 | clean build \ 26 | ONLY_ACTIVE_ARCH="NO" \ 27 | CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" \ 28 | 29 | # copy .app out of DerivedData 30 | DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-iphoneos/$APPLICATION_NAME.app" 31 | TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" 32 | cp -r "$DD_APP_PATH" "$TARGET_APP" 33 | 34 | # clean the app 35 | codesign --remove "$TARGET_APP" 36 | if [ -e "$TARGET_APP/_CodeSignature" ]; then 37 | rm -rf "$TARGET_APP/_CodeSignature" 38 | fi 39 | if [ -e "$TARGET_APP/embedded.mobileprovision" ]; then 40 | rm -rf "$TARGET_APP/embedded.mobileprovision" 41 | fi 42 | 43 | # make our sign 44 | ldid -S"$WORKING_LOCATION/Entitlements.plist" "$TARGET_APP/$APPLICATION_NAME" 45 | 46 | CONTROL_VERSION="$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$TARGET_APP/Info.plist")" 47 | BUILD_VERSION="$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$TARGET_APP/Info.plist")" 48 | 49 | 50 | echo "[*] preparing package layout..." 51 | 52 | # make dpkg layer 53 | cd "$WORKING_LOCATION/build/dpkg" 54 | mkdir ./Applications 55 | cp -r "$TARGET_APP" ./Applications/ 56 | cp -r "$WORKING_LOCATION/DEBIAN" ./ 57 | sed -i '' "s/@@VERSION@@/$CONTROL_VERSION.$BUILD_VERSION/g" ./DEBIAN/control 58 | 59 | # fix permission 60 | cd "$WORKING_LOCATION/build/dpkg" 61 | chmod -R 0755 DEBIAN 62 | 63 | echo "[*] packaging..." 64 | 65 | cd "$WORKING_LOCATION/build/dpkg" 66 | PKG_NAME="com.powen.permasignerios.$CONTROL_VERSION.$BUILD_VERSION.deb" 67 | dpkg-deb -b . "../$PKG_NAME" 68 | 69 | mv "$WORKING_LOCATION/build/$PKG_NAME" "$WORKING_LOCATION/$PKG_NAME" 70 | 71 | # print done 72 | echo "Package is at $WORKING_LOCATION/$PKG_NAME" 73 | -------------------------------------------------------------------------------- /BuildDebForTest.command: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | cd "$(dirname "$0")" 6 | 7 | WORKING_LOCATION="$(pwd)" 8 | APPLICATION_NAME="permasigneriOS" 9 | TIMESTAMP="$(date +%s)" 10 | 11 | rm -rf build *.deb || true 12 | mkdir build 13 | 14 | cd build 15 | 16 | rm -rf dpkg || true 17 | mkdir dpkg 18 | 19 | echo "[*] starting build..." 20 | 21 | xcodebuild -project "$WORKING_LOCATION/$APPLICATION_NAME.xcodeproj" \ 22 | -scheme "$APPLICATION_NAME" \ 23 | -configuration Release \ 24 | -derivedDataPath "$WORKING_LOCATION/build/DerivedDataApp" \ 25 | -destination 'generic/platform=iOS' \ 26 | clean build \ 27 | ONLY_ACTIVE_ARCH="NO" \ 28 | CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO" \ 29 | 30 | # copy .app out of DerivedData 31 | DD_APP_PATH="$WORKING_LOCATION/build/DerivedDataApp/Build/Products/Release-iphoneos/$APPLICATION_NAME.app" 32 | TARGET_APP="$WORKING_LOCATION/build/$APPLICATION_NAME.app" 33 | cp -r "$DD_APP_PATH" "$TARGET_APP" 34 | 35 | # clean the app 36 | codesign --remove "$TARGET_APP" 37 | if [ -e "$TARGET_APP/_CodeSignature" ]; then 38 | rm -rf "$TARGET_APP/_CodeSignature" 39 | fi 40 | if [ -e "$TARGET_APP/embedded.mobileprovision" ]; then 41 | rm -rf "$TARGET_APP/embedded.mobileprovision" 42 | fi 43 | 44 | # make our sign 45 | ldid -S"$WORKING_LOCATION/Entitlements.plist" "$TARGET_APP/$APPLICATION_NAME" 46 | 47 | CONTROL_VERSION="$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$TARGET_APP/Info.plist")" 48 | BUILD_VERSION="$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$TARGET_APP/Info.plist")" 49 | 50 | 51 | echo "[*] preparing package layout..." 52 | 53 | # make dpkg layer 54 | cd "$WORKING_LOCATION/build/dpkg" 55 | mkdir ./Applications 56 | cp -r "$TARGET_APP" ./Applications/ 57 | cp -r "$WORKING_LOCATION/DEBIAN" ./ 58 | sed -i '' "s/@@VERSION@@/$CONTROL_VERSION.$BUILD_VERSION-TEST/g" ./DEBIAN/control 59 | 60 | # fix permission 61 | cd "$WORKING_LOCATION/build/dpkg" 62 | chmod -R 0755 DEBIAN 63 | 64 | echo "[*] packaging..." 65 | 66 | cd "$WORKING_LOCATION/build/dpkg" 67 | PKG_NAME="com.powen.permasignerios.$CONTROL_VERSION.$BUILD_VERSION-$TIMESTAMP.deb" 68 | dpkg-deb -b . "../$PKG_NAME" 69 | 70 | mv "$WORKING_LOCATION/build/$PKG_NAME" "$WORKING_LOCATION/$PKG_NAME" 71 | 72 | # print done 73 | echo "Package is at $WORKING_LOCATION/$PKG_NAME" 74 | -------------------------------------------------------------------------------- /DEBIAN/control: -------------------------------------------------------------------------------- 1 | Package: com.powen.permasignerios 2 | Name: permasigneriOS 3 | Description: permasigner on iOS 4 | Author: Powen 5 | Maintainer: Powen 6 | Version: @@VERSION@@ 7 | Section: Applications 8 | Depends: dpkg, ldid , bash , plutil | com.bingner.plutil 9 | Pre-Depends: firmware (>= 14.0) 10 | Architecture: iphoneos-arm 11 | depiction: https://github.com/powenn/permasigneriOS 12 | -------------------------------------------------------------------------------- /DEBIAN/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | APP_PATH="/Applications/permasigneriOS.app" 4 | 5 | if [ -d "$APP_PATH" ]; then 6 | chown -R root:wheel "$APP_PATH" 7 | chmod -R 755 "$APP_PATH" 8 | else 9 | echo "Binary not found at $APP_PATH" 10 | fi 11 | 12 | echo "[*] reloading icon cache for springboard..." 13 | uicache -p "$APP_PATH" 14 | echo "[*] completed" 15 | -------------------------------------------------------------------------------- /DEBIAN/postrm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "[i] if springboard is not cleaned, please run uicache manually" -------------------------------------------------------------------------------- /Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | platform-application 6 | 7 | com.apple.private.security.no-container 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # permasigneriOS 2 | 3 |

4 | 5 | Releases 6 | 7 | 8 | Code Size in Bytes 9 | 10 |

11 | 12 | permasigner on iOS 13 | 14 | You can get .deb files at [Release](https://github.com/powenn/permasigneriOS/releases) 15 | 16 | Or add the [Repo](https://powenn.github.io/PowenRepo/) to package manager 17 | 18 | You can check [permasigner](https://github.com/itsnebulalol/permasigner) for details about what is permanent sign. 19 | 20 | ## Localizations support 21 | 22 | Check [permasigneriOS-Localizations](https://github.com/powenn/permasigneriOS-Localizations) 23 | 24 | Just create the LocaleCode.lproj pull request to contribute it 25 | 26 | The release will also upload to [Repo](https://powenn.github.io/PowenRepo/) 27 | 28 | 29 | ## Screenshots 30 | 31 | ![Demo photo][1] 32 | 33 | [More...](https://powenn.github.io/PowenRepo/depiction/web/com.powen.permasignerios.html) 34 | 35 | ## Contributors of the project 36 | 37 | - [Paisseon](https://github.com/Paisseon) for credits view and progress bar 38 | - [fullpwn](https://github.com/fullpwn) for fixing spelling 39 | 40 | ## Credits 41 | 42 | - [Linus Henze](https://github.com/LinusHenze) for the bug 43 | - [zhuowei](https://github.com/zhuowei) for the original Taurine script 44 | - [Lakr233](https://github.com/Lakr233) for helping me and some codes reference 45 | - [itsnebulalol](https://github.com/itsnebulalol) for permasigner project 46 | 47 | [1]:https://powenn.github.io/PowenRepo/assets/com.powen.permasignerios/screenshot/01.png 48 | [2]:https://powenn.github.io/PowenRepo/assets/com.powen.permasignerios/screenshot/02.png 49 | [3]:https://powenn.github.io/PowenRepo/assets/com.powen.permasignerios/screenshot/03.png 50 | [4]:https://powenn.github.io/PowenRepo/assets/com.powen.permasignerios/screenshot/04.png 51 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 55; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6AFB2B2A287C9D77004411B2 /* CreditsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFB2B29287C9D77004411B2 /* CreditsView.swift */; }; 11 | B57382972874162300133E34 /* permasigneriOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382962874162300133E34 /* permasigneriOSApp.swift */; }; 12 | B57382992874162300133E34 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382982874162300133E34 /* ContentView.swift */; }; 13 | B573829B2874162700133E34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B573829A2874162700133E34 /* Assets.xcassets */; }; 14 | B573829E2874162700133E34 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B573829D2874162700133E34 /* Preview Assets.xcassets */; }; 15 | B57382A62874178600133E34 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B57382A52874178600133E34 /* Launch Screen.storyboard */; }; 16 | B57382AE2874191700133E34 /* postinst in Resources */ = {isa = PBXBuildFile; fileRef = B57382AA2874191700133E34 /* postinst */; }; 17 | B57382AF2874191700133E34 /* postrm in Resources */ = {isa = PBXBuildFile; fileRef = B57382AB2874191700133E34 /* postrm */; }; 18 | B57382B02874191700133E34 /* dev_certificate.p12 in Resources */ = {isa = PBXBuildFile; fileRef = B57382AC2874191700133E34 /* dev_certificate.p12 */; }; 19 | B57382B12874191700133E34 /* control in Resources */ = {isa = PBXBuildFile; fileRef = B57382AD2874191700133E34 /* control */; }; 20 | B57382B628741A4A00133E34 /* SignView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382B528741A4A00133E34 /* SignView.swift */; }; 21 | B57382B828741A7D00133E34 /* ButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382B728741A7D00133E34 /* ButtonStyle.swift */; }; 22 | B57382C7287426D700133E34 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382C6287426D700133E34 /* Extensions.swift */; }; 23 | B57382C9287447EB00133E34 /* AppInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382C8287447EB00133E34 /* AppInfoView.swift */; }; 24 | B57382CE2874755500133E34 /* AuxiliaryExecute in Frameworks */ = {isa = PBXBuildFile; productRef = B57382CD2874755500133E34 /* AuxiliaryExecute */; }; 25 | B57382D328751D0E00133E34 /* DirectoryPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382D228751D0E00133E34 /* DirectoryPath.swift */; }; 26 | B57382D52875586D00133E34 /* CheckApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57382D42875586D00133E34 /* CheckApp.swift */; }; 27 | B575D397289229A000377919 /* Plist.sh in Resources */ = {isa = PBXBuildFile; fileRef = B575D3962892299F00377919 /* Plist.sh */; }; 28 | B5A1F7772875C46F002176A4 /* PackToDeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1F7762875C46F002176A4 /* PackToDeb.swift */; }; 29 | B5A1F77E2876A9BC002176A4 /* OpenInFilza.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A1F77D2876A9BC002176A4 /* OpenInFilza.swift */; }; 30 | B5A1F7822877AD53002176A4 /* entitlements.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5A1F7812877AD53002176A4 /* entitlements.plist */; }; 31 | B5A1F7852877CCF1002176A4 /* ZipArchive in Frameworks */ = {isa = PBXBuildFile; productRef = B5A1F7842877CCF1002176A4 /* ZipArchive */; }; 32 | /* End PBXBuildFile section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 6AFB2B29287C9D77004411B2 /* CreditsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreditsView.swift; sourceTree = ""; }; 36 | B57382932874162300133E34 /* permasigneriOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = permasigneriOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | B57382962874162300133E34 /* permasigneriOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = permasigneriOSApp.swift; sourceTree = ""; }; 38 | B57382982874162300133E34 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 39 | B573829A2874162700133E34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 40 | B573829D2874162700133E34 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 41 | B57382A42874176500133E34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 42 | B57382A52874178600133E34 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 43 | B57382AA2874191700133E34 /* postinst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postinst; sourceTree = ""; }; 44 | B57382AB2874191700133E34 /* postrm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = postrm; sourceTree = ""; }; 45 | B57382AC2874191700133E34 /* dev_certificate.p12 */ = {isa = PBXFileReference; lastKnownFileType = file; path = dev_certificate.p12; sourceTree = ""; }; 46 | B57382AD2874191700133E34 /* control */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = control; sourceTree = ""; }; 47 | B57382B528741A4A00133E34 /* SignView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignView.swift; sourceTree = ""; }; 48 | B57382B728741A7D00133E34 /* ButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonStyle.swift; sourceTree = ""; }; 49 | B57382C4287421D800133E34 /* BuildDeb.command */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = BuildDeb.command; sourceTree = SOURCE_ROOT; }; 50 | B57382C6287426D700133E34 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 51 | B57382C8287447EB00133E34 /* AppInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfoView.swift; sourceTree = ""; }; 52 | B57382D228751D0E00133E34 /* DirectoryPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectoryPath.swift; sourceTree = ""; }; 53 | B57382D42875586D00133E34 /* CheckApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckApp.swift; sourceTree = ""; }; 54 | B575D3962892299F00377919 /* Plist.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = Plist.sh; sourceTree = ""; }; 55 | B5A1F7762875C46F002176A4 /* PackToDeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackToDeb.swift; sourceTree = ""; }; 56 | B5A1F77D2876A9BC002176A4 /* OpenInFilza.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInFilza.swift; sourceTree = ""; }; 57 | B5A1F7812877AD53002176A4 /* entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = entitlements.plist; sourceTree = ""; }; 58 | B5D292E728A5EF42006E0151 /* BuildDebForTest.command */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = BuildDebForTest.command; sourceTree = ""; }; 59 | /* End PBXFileReference section */ 60 | 61 | /* Begin PBXFrameworksBuildPhase section */ 62 | B57382902874162300133E34 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | B57382CE2874755500133E34 /* AuxiliaryExecute in Frameworks */, 67 | B5A1F7852877CCF1002176A4 /* ZipArchive in Frameworks */, 68 | ); 69 | runOnlyForDeploymentPostprocessing = 0; 70 | }; 71 | /* End PBXFrameworksBuildPhase section */ 72 | 73 | /* Begin PBXGroup section */ 74 | B573828A2874162300133E34 = { 75 | isa = PBXGroup; 76 | children = ( 77 | B57382C4287421D800133E34 /* BuildDeb.command */, 78 | B5D292E728A5EF42006E0151 /* BuildDebForTest.command */, 79 | B57382952874162300133E34 /* permasigneriOS */, 80 | B57382942874162300133E34 /* Products */, 81 | ); 82 | sourceTree = ""; 83 | }; 84 | B57382942874162300133E34 /* Products */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | B57382932874162300133E34 /* permasigneriOS.app */, 88 | ); 89 | name = Products; 90 | sourceTree = ""; 91 | }; 92 | B57382952874162300133E34 /* permasigneriOS */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | B57382A42874176500133E34 /* Info.plist */, 96 | B57382962874162300133E34 /* permasigneriOSApp.swift */, 97 | B57382B728741A7D00133E34 /* ButtonStyle.swift */, 98 | B57382C6287426D700133E34 /* Extensions.swift */, 99 | B57382D228751D0E00133E34 /* DirectoryPath.swift */, 100 | B57382D42875586D00133E34 /* CheckApp.swift */, 101 | B5A1F7762875C46F002176A4 /* PackToDeb.swift */, 102 | B5A1F77D2876A9BC002176A4 /* OpenInFilza.swift */, 103 | B57382B228741A2200133E34 /* Views */, 104 | B57382A82874191700133E34 /* Resources */, 105 | B57382A52874178600133E34 /* Launch Screen.storyboard */, 106 | B573829A2874162700133E34 /* Assets.xcassets */, 107 | B573829C2874162700133E34 /* Preview Content */, 108 | ); 109 | path = permasigneriOS; 110 | sourceTree = ""; 111 | }; 112 | B573829C2874162700133E34 /* Preview Content */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | B573829D2874162700133E34 /* Preview Assets.xcassets */, 116 | ); 117 | path = "Preview Content"; 118 | sourceTree = ""; 119 | }; 120 | B57382A82874191700133E34 /* Resources */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | B575D3962892299F00377919 /* Plist.sh */, 124 | B5A1F7812877AD53002176A4 /* entitlements.plist */, 125 | B57382AA2874191700133E34 /* postinst */, 126 | B57382AB2874191700133E34 /* postrm */, 127 | B57382AC2874191700133E34 /* dev_certificate.p12 */, 128 | B57382AD2874191700133E34 /* control */, 129 | ); 130 | path = Resources; 131 | sourceTree = ""; 132 | }; 133 | B57382B228741A2200133E34 /* Views */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | B57382982874162300133E34 /* ContentView.swift */, 137 | B57382B528741A4A00133E34 /* SignView.swift */, 138 | 6AFB2B29287C9D77004411B2 /* CreditsView.swift */, 139 | B57382C8287447EB00133E34 /* AppInfoView.swift */, 140 | ); 141 | path = Views; 142 | sourceTree = ""; 143 | }; 144 | /* End PBXGroup section */ 145 | 146 | /* Begin PBXNativeTarget section */ 147 | B57382922874162300133E34 /* permasigneriOS */ = { 148 | isa = PBXNativeTarget; 149 | buildConfigurationList = B57382A12874162700133E34 /* Build configuration list for PBXNativeTarget "permasigneriOS" */; 150 | buildPhases = ( 151 | B573828F2874162300133E34 /* Sources */, 152 | B57382902874162300133E34 /* Frameworks */, 153 | B57382912874162300133E34 /* Resources */, 154 | ); 155 | buildRules = ( 156 | ); 157 | dependencies = ( 158 | ); 159 | name = permasigneriOS; 160 | packageProductDependencies = ( 161 | B57382CD2874755500133E34 /* AuxiliaryExecute */, 162 | B5A1F7842877CCF1002176A4 /* ZipArchive */, 163 | ); 164 | productName = permasigneriOS; 165 | productReference = B57382932874162300133E34 /* permasigneriOS.app */; 166 | productType = "com.apple.product-type.application"; 167 | }; 168 | /* End PBXNativeTarget section */ 169 | 170 | /* Begin PBXProject section */ 171 | B573828B2874162300133E34 /* Project object */ = { 172 | isa = PBXProject; 173 | attributes = { 174 | BuildIndependentTargetsInParallel = 1; 175 | LastSwiftUpdateCheck = 1330; 176 | LastUpgradeCheck = 1330; 177 | TargetAttributes = { 178 | B57382922874162300133E34 = { 179 | CreatedOnToolsVersion = 13.3.1; 180 | }; 181 | }; 182 | }; 183 | buildConfigurationList = B573828E2874162300133E34 /* Build configuration list for PBXProject "permasigneriOS" */; 184 | compatibilityVersion = "Xcode 13.0"; 185 | developmentRegion = en; 186 | hasScannedForEncodings = 0; 187 | knownRegions = ( 188 | en, 189 | Base, 190 | ); 191 | mainGroup = B573828A2874162300133E34; 192 | packageReferences = ( 193 | B57382CC2874755500133E34 /* XCRemoteSwiftPackageReference "AuxiliaryExecute" */, 194 | B5A1F7832877CCF1002176A4 /* XCRemoteSwiftPackageReference "ZipArchive" */, 195 | ); 196 | productRefGroup = B57382942874162300133E34 /* Products */; 197 | projectDirPath = ""; 198 | projectRoot = ""; 199 | targets = ( 200 | B57382922874162300133E34 /* permasigneriOS */, 201 | ); 202 | }; 203 | /* End PBXProject section */ 204 | 205 | /* Begin PBXResourcesBuildPhase section */ 206 | B57382912874162300133E34 /* Resources */ = { 207 | isa = PBXResourcesBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | B5A1F7822877AD53002176A4 /* entitlements.plist in Resources */, 211 | B57382AF2874191700133E34 /* postrm in Resources */, 212 | B57382B02874191700133E34 /* dev_certificate.p12 in Resources */, 213 | B57382B12874191700133E34 /* control in Resources */, 214 | B57382AE2874191700133E34 /* postinst in Resources */, 215 | B57382A62874178600133E34 /* Launch Screen.storyboard in Resources */, 216 | B573829E2874162700133E34 /* Preview Assets.xcassets in Resources */, 217 | B573829B2874162700133E34 /* Assets.xcassets in Resources */, 218 | B575D397289229A000377919 /* Plist.sh in Resources */, 219 | ); 220 | runOnlyForDeploymentPostprocessing = 0; 221 | }; 222 | /* End PBXResourcesBuildPhase section */ 223 | 224 | /* Begin PBXSourcesBuildPhase section */ 225 | B573828F2874162300133E34 /* Sources */ = { 226 | isa = PBXSourcesBuildPhase; 227 | buildActionMask = 2147483647; 228 | files = ( 229 | B57382D328751D0E00133E34 /* DirectoryPath.swift in Sources */, 230 | 6AFB2B2A287C9D77004411B2 /* CreditsView.swift in Sources */, 231 | B57382D52875586D00133E34 /* CheckApp.swift in Sources */, 232 | B5A1F77E2876A9BC002176A4 /* OpenInFilza.swift in Sources */, 233 | B57382B628741A4A00133E34 /* SignView.swift in Sources */, 234 | B5A1F7772875C46F002176A4 /* PackToDeb.swift in Sources */, 235 | B57382C7287426D700133E34 /* Extensions.swift in Sources */, 236 | B57382C9287447EB00133E34 /* AppInfoView.swift in Sources */, 237 | B57382992874162300133E34 /* ContentView.swift in Sources */, 238 | B57382B828741A7D00133E34 /* ButtonStyle.swift in Sources */, 239 | B57382972874162300133E34 /* permasigneriOSApp.swift in Sources */, 240 | ); 241 | runOnlyForDeploymentPostprocessing = 0; 242 | }; 243 | /* End PBXSourcesBuildPhase section */ 244 | 245 | /* Begin XCBuildConfiguration section */ 246 | B573829F2874162700133E34 /* Debug */ = { 247 | isa = XCBuildConfiguration; 248 | buildSettings = { 249 | ALWAYS_SEARCH_USER_PATHS = NO; 250 | CLANG_ANALYZER_NONNULL = YES; 251 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 252 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 253 | CLANG_ENABLE_MODULES = YES; 254 | CLANG_ENABLE_OBJC_ARC = YES; 255 | CLANG_ENABLE_OBJC_WEAK = YES; 256 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 257 | CLANG_WARN_BOOL_CONVERSION = YES; 258 | CLANG_WARN_COMMA = YES; 259 | CLANG_WARN_CONSTANT_CONVERSION = YES; 260 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 261 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 262 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 263 | CLANG_WARN_EMPTY_BODY = YES; 264 | CLANG_WARN_ENUM_CONVERSION = YES; 265 | CLANG_WARN_INFINITE_RECURSION = YES; 266 | CLANG_WARN_INT_CONVERSION = YES; 267 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 268 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 269 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 270 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 271 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 272 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 273 | CLANG_WARN_STRICT_PROTOTYPES = YES; 274 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 275 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 276 | CLANG_WARN_UNREACHABLE_CODE = YES; 277 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 278 | COPY_PHASE_STRIP = NO; 279 | DEBUG_INFORMATION_FORMAT = dwarf; 280 | ENABLE_STRICT_OBJC_MSGSEND = YES; 281 | ENABLE_TESTABILITY = YES; 282 | GCC_C_LANGUAGE_STANDARD = gnu11; 283 | GCC_DYNAMIC_NO_PIC = NO; 284 | GCC_NO_COMMON_BLOCKS = YES; 285 | GCC_OPTIMIZATION_LEVEL = 0; 286 | GCC_PREPROCESSOR_DEFINITIONS = ( 287 | "DEBUG=1", 288 | "$(inherited)", 289 | ); 290 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 291 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 292 | GCC_WARN_UNDECLARED_SELECTOR = YES; 293 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 294 | GCC_WARN_UNUSED_FUNCTION = YES; 295 | GCC_WARN_UNUSED_VARIABLE = YES; 296 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 297 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 298 | MTL_FAST_MATH = YES; 299 | ONLY_ACTIVE_ARCH = YES; 300 | SDKROOT = iphoneos; 301 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 302 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 303 | }; 304 | name = Debug; 305 | }; 306 | B57382A02874162700133E34 /* Release */ = { 307 | isa = XCBuildConfiguration; 308 | buildSettings = { 309 | ALWAYS_SEARCH_USER_PATHS = NO; 310 | CLANG_ANALYZER_NONNULL = YES; 311 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 312 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 313 | CLANG_ENABLE_MODULES = YES; 314 | CLANG_ENABLE_OBJC_ARC = YES; 315 | CLANG_ENABLE_OBJC_WEAK = YES; 316 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 317 | CLANG_WARN_BOOL_CONVERSION = YES; 318 | CLANG_WARN_COMMA = YES; 319 | CLANG_WARN_CONSTANT_CONVERSION = YES; 320 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 321 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 322 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 323 | CLANG_WARN_EMPTY_BODY = YES; 324 | CLANG_WARN_ENUM_CONVERSION = YES; 325 | CLANG_WARN_INFINITE_RECURSION = YES; 326 | CLANG_WARN_INT_CONVERSION = YES; 327 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 328 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 329 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 331 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 332 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 333 | CLANG_WARN_STRICT_PROTOTYPES = YES; 334 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 335 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 336 | CLANG_WARN_UNREACHABLE_CODE = YES; 337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 338 | COPY_PHASE_STRIP = NO; 339 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 340 | ENABLE_NS_ASSERTIONS = NO; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | GCC_C_LANGUAGE_STANDARD = gnu11; 343 | GCC_NO_COMMON_BLOCKS = YES; 344 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 345 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 346 | GCC_WARN_UNDECLARED_SELECTOR = YES; 347 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 348 | GCC_WARN_UNUSED_FUNCTION = YES; 349 | GCC_WARN_UNUSED_VARIABLE = YES; 350 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 351 | MTL_ENABLE_DEBUG_INFO = NO; 352 | MTL_FAST_MATH = YES; 353 | SDKROOT = iphoneos; 354 | SWIFT_COMPILATION_MODE = wholemodule; 355 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 356 | VALIDATE_PRODUCT = YES; 357 | }; 358 | name = Release; 359 | }; 360 | B57382A22874162700133E34 /* Debug */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 364 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 365 | CODE_SIGN_STYLE = Automatic; 366 | CURRENT_PROJECT_VERSION = 5; 367 | DEVELOPMENT_ASSET_PATHS = "\"permasigneriOS/Preview Content\""; 368 | DEVELOPMENT_TEAM = L4LN9U3ZS7; 369 | ENABLE_PREVIEWS = YES; 370 | GENERATE_INFOPLIST_FILE = YES; 371 | INFOPLIST_FILE = permasigneriOS/Info.plist; 372 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 373 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 374 | INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen"; 375 | INFOPLIST_KEY_UIRequiresFullScreen = YES; 376 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; 377 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 378 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 379 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 380 | LD_RUNPATH_SEARCH_PATHS = ( 381 | "$(inherited)", 382 | "@executable_path/Frameworks", 383 | ); 384 | MARKETING_VERSION = 0.2; 385 | PRODUCT_BUNDLE_IDENTIFIER = com.powen.permasigneriOS; 386 | PRODUCT_NAME = "$(TARGET_NAME)"; 387 | SWIFT_EMIT_LOC_STRINGS = YES; 388 | SWIFT_VERSION = 5.0; 389 | TARGETED_DEVICE_FAMILY = "1,2"; 390 | }; 391 | name = Debug; 392 | }; 393 | B57382A32874162700133E34 /* Release */ = { 394 | isa = XCBuildConfiguration; 395 | buildSettings = { 396 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 397 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 398 | CODE_SIGN_STYLE = Automatic; 399 | CURRENT_PROJECT_VERSION = 5; 400 | DEVELOPMENT_ASSET_PATHS = "\"permasigneriOS/Preview Content\""; 401 | DEVELOPMENT_TEAM = L4LN9U3ZS7; 402 | ENABLE_PREVIEWS = YES; 403 | GENERATE_INFOPLIST_FILE = YES; 404 | INFOPLIST_FILE = permasigneriOS/Info.plist; 405 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 406 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 407 | INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen"; 408 | INFOPLIST_KEY_UIRequiresFullScreen = YES; 409 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; 410 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 411 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 412 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 413 | LD_RUNPATH_SEARCH_PATHS = ( 414 | "$(inherited)", 415 | "@executable_path/Frameworks", 416 | ); 417 | MARKETING_VERSION = 0.2; 418 | PRODUCT_BUNDLE_IDENTIFIER = com.powen.permasigneriOS; 419 | PRODUCT_NAME = "$(TARGET_NAME)"; 420 | SWIFT_EMIT_LOC_STRINGS = YES; 421 | SWIFT_VERSION = 5.0; 422 | TARGETED_DEVICE_FAMILY = "1,2"; 423 | }; 424 | name = Release; 425 | }; 426 | /* End XCBuildConfiguration section */ 427 | 428 | /* Begin XCConfigurationList section */ 429 | B573828E2874162300133E34 /* Build configuration list for PBXProject "permasigneriOS" */ = { 430 | isa = XCConfigurationList; 431 | buildConfigurations = ( 432 | B573829F2874162700133E34 /* Debug */, 433 | B57382A02874162700133E34 /* Release */, 434 | ); 435 | defaultConfigurationIsVisible = 0; 436 | defaultConfigurationName = Release; 437 | }; 438 | B57382A12874162700133E34 /* Build configuration list for PBXNativeTarget "permasigneriOS" */ = { 439 | isa = XCConfigurationList; 440 | buildConfigurations = ( 441 | B57382A22874162700133E34 /* Debug */, 442 | B57382A32874162700133E34 /* Release */, 443 | ); 444 | defaultConfigurationIsVisible = 0; 445 | defaultConfigurationName = Release; 446 | }; 447 | /* End XCConfigurationList section */ 448 | 449 | /* Begin XCRemoteSwiftPackageReference section */ 450 | B57382CC2874755500133E34 /* XCRemoteSwiftPackageReference "AuxiliaryExecute" */ = { 451 | isa = XCRemoteSwiftPackageReference; 452 | repositoryURL = "https://github.com/Lakr233/AuxiliaryExecute"; 453 | requirement = { 454 | kind = upToNextMajorVersion; 455 | minimumVersion = 1.0.0; 456 | }; 457 | }; 458 | B5A1F7832877CCF1002176A4 /* XCRemoteSwiftPackageReference "ZipArchive" */ = { 459 | isa = XCRemoteSwiftPackageReference; 460 | repositoryURL = "https://github.com/ZipArchive/ZipArchive.git"; 461 | requirement = { 462 | kind = exactVersion; 463 | version = 2.4.3; 464 | }; 465 | }; 466 | /* End XCRemoteSwiftPackageReference section */ 467 | 468 | /* Begin XCSwiftPackageProductDependency section */ 469 | B57382CD2874755500133E34 /* AuxiliaryExecute */ = { 470 | isa = XCSwiftPackageProductDependency; 471 | package = B57382CC2874755500133E34 /* XCRemoteSwiftPackageReference "AuxiliaryExecute" */; 472 | productName = AuxiliaryExecute; 473 | }; 474 | B5A1F7842877CCF1002176A4 /* ZipArchive */ = { 475 | isa = XCSwiftPackageProductDependency; 476 | package = B5A1F7832877CCF1002176A4 /* XCRemoteSwiftPackageReference "ZipArchive" */; 477 | productName = ZipArchive; 478 | }; 479 | /* End XCSwiftPackageProductDependency section */ 480 | }; 481 | rootObject = B573828B2874162300133E34 /* Project object */; 482 | } 483 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "AuxiliaryExecute", 6 | "repositoryURL": "https://github.com/Lakr233/AuxiliaryExecute", 7 | "state": { 8 | "branch": null, 9 | "revision": "baed197de469ebfc0aaccc6074ad8a98673cebe9", 10 | "version": "1.3.0" 11 | } 12 | }, 13 | { 14 | "package": "ZipArchive", 15 | "repositoryURL": "https://github.com/ZipArchive/ZipArchive.git", 16 | "state": { 17 | "branch": null, 18 | "revision": "38e0ce0598e06b034271f296a8e15b149c91aa19", 19 | "version": "2.4.3" 20 | } 21 | } 22 | ] 23 | }, 24 | "version": 1 25 | } 26 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/project.xcworkspace/xcuserdata/xiaobowen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS.xcodeproj/project.xcworkspace/xcuserdata/xiaobowen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/xcuserdata/chara.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | permasigneriOS.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/xcuserdata/xiaobowen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /permasigneriOS.xcodeproj/xcuserdata/xiaobowen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | permasigneriOS.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/40-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/40-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/40-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/40-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/58-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/58-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/80-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "40.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "60.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "58.png", 17 | "idiom" : "iphone", 18 | "scale" : "2x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "87.png", 23 | "idiom" : "iphone", 24 | "scale" : "3x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "80.png", 29 | "idiom" : "iphone", 30 | "scale" : "2x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "filename" : "120.png", 35 | "idiom" : "iphone", 36 | "scale" : "3x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "120-1.png", 41 | "idiom" : "iphone", 42 | "scale" : "2x", 43 | "size" : "60x60" 44 | }, 45 | { 46 | "filename" : "180.png", 47 | "idiom" : "iphone", 48 | "scale" : "3x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "20.png", 53 | "idiom" : "ipad", 54 | "scale" : "1x", 55 | "size" : "20x20" 56 | }, 57 | { 58 | "filename" : "40-1.png", 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "20x20" 62 | }, 63 | { 64 | "filename" : "29.png", 65 | "idiom" : "ipad", 66 | "scale" : "1x", 67 | "size" : "29x29" 68 | }, 69 | { 70 | "filename" : "58-1.png", 71 | "idiom" : "ipad", 72 | "scale" : "2x", 73 | "size" : "29x29" 74 | }, 75 | { 76 | "filename" : "40-2.png", 77 | "idiom" : "ipad", 78 | "scale" : "1x", 79 | "size" : "40x40" 80 | }, 81 | { 82 | "filename" : "80-1.png", 83 | "idiom" : "ipad", 84 | "scale" : "2x", 85 | "size" : "40x40" 86 | }, 87 | { 88 | "filename" : "76.png", 89 | "idiom" : "ipad", 90 | "scale" : "1x", 91 | "size" : "76x76" 92 | }, 93 | { 94 | "filename" : "152.png", 95 | "idiom" : "ipad", 96 | "scale" : "2x", 97 | "size" : "76x76" 98 | }, 99 | { 100 | "filename" : "167.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "83.5x83.5" 104 | }, 105 | { 106 | "filename" : "1024.png", 107 | "idiom" : "ios-marketing", 108 | "scale" : "1x", 109 | "size" : "1024x1024" 110 | } 111 | ], 112 | "info" : { 113 | "author" : "xcode", 114 | "version" : 1 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/GithubIcon.imageset/25231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/GithubIcon.imageset/25231.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/GithubIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "25231.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LakrPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LakrPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LakrPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Lakr233PFP.imageset/LakrPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LinusPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LinusPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LinusPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/Linus HenzePFP.imageset/LinusPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "PaisseonPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "PaisseonPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "PaisseonPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PaisseonPFP.imageset/PaisseonPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PowenPFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "PowenPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "PowenPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "PowenPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/PowenPFP.imageset/PowenPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ZhouweiPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "ZhouweiPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "ZhouweiPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/ZhuoweiPFP.imageset/ZhouweiPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "newishPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "newishPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "newishPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/fullpwnPFP.imageset/newishPFP.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "NebulaPFP.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "NebulaPFP-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "NebulaPFP-2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP-1.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP-2.png -------------------------------------------------------------------------------- /permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Assets.xcassets/itsnebulalolPFP.imageset/NebulaPFP.png -------------------------------------------------------------------------------- /permasigneriOS/ButtonStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ButtonStyle.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct SignButtonStyle: ButtonStyle { 11 | func makeBody(configuration: Configuration) -> some View { 12 | configuration.label 13 | .frame(minWidth: 0,maxWidth: .infinity) 14 | .foregroundColor(Color.white) 15 | .padding() 16 | .background(Color.blue) 17 | .cornerRadius(40) 18 | .padding() 19 | .scaleEffect(configuration.isPressed ? 0.8 : 1.0) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /permasigneriOS/CheckApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CheckAppInsidePayload.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/6. 6 | // 7 | 8 | import Foundation 9 | import ZipArchive 10 | 11 | class CheckApp: ObservableObject { 12 | 13 | private init() { } 14 | 15 | static let shared = CheckApp() 16 | var appNameInPayload:String = "" 17 | var payloadPath:URL = URL(fileURLWithPath: "") 18 | 19 | @Published var fileName:String = "" 20 | var filePath:String = "" 21 | 22 | var destination = URL(fileURLWithPath: "") 23 | var fileDir = URL(fileURLWithPath: "") 24 | 25 | // App Info vars 26 | var config: [String: Any]? 27 | var InfoPlistPath = URL(string: "") 28 | var app_name:String = "" 29 | @Published var custom_app_name:String = "" 30 | var app_bundle:String = "" 31 | @Published var custom_app_bundle:String = "" 32 | var app_version:String = "" 33 | var app_min_ios:String = "" 34 | var app_author:String = "" 35 | @Published var custom_app_executable:String = "" 36 | var app_executable:String? = nil 37 | var validInfoPlist:Bool = false 38 | // ---------------------------- 39 | 40 | func extractIpa() { 41 | do { 42 | destination = tmpDirectory.appendingPathComponent(fileName.replacingOccurrences(of: ".ipa", with: ".zip")) 43 | fileDir = tmpDirectory.appendingPathComponent(fileName.replacingOccurrences(of: ".ipa", with: "")) 44 | 45 | payloadPath = fileDir.appendingPathComponent("Payload") 46 | 47 | try FileManager.default.copyItem(atPath: filePath, toPath: destination.path) 48 | try SSZipArchive.unzipFile(atPath: destination.path, toDestination: fileDir.path, overwrite: true, password: nil) 49 | } catch { 50 | print(error.localizedDescription) 51 | } 52 | } 53 | 54 | func getInfoPlistValue() { 55 | do { 56 | // get Info in plist file 57 | let infoPlistData = try Data(contentsOf: InfoPlistPath!) 58 | if let dict = try PropertyListSerialization.propertyList(from: infoPlistData, options: [], format: nil) as? [String: Any] { 59 | config = dict 60 | // check is this Info.plist valid 61 | if ((config?["CFBundleExecutable"]) != nil) { 62 | app_executable = config?["CFBundleExecutable"] as? String 63 | app_name = config?["CFBundleName"] as! String 64 | app_bundle = config?["CFBundleIdentifier"] as! String 65 | app_version = config?["CFBundleShortVersionString"] as! String 66 | app_min_ios = config?["MinimumOSVersion"] as! String? ?? "14.0" 67 | app_author = app_bundle.components(separatedBy: ".")[1] 68 | 69 | custom_app_name = app_name 70 | custom_app_bundle = app_bundle 71 | custom_app_executable = app_executable! 72 | validInfoPlist = true 73 | } else { 74 | validInfoPlist = false 75 | } 76 | } 77 | } catch { 78 | print(error.localizedDescription) 79 | } 80 | } 81 | 82 | func checkIsIpaPayloadValid() -> Bool { 83 | // check .app in Payload 84 | if FileManager.default.fileExists(atPath: payloadPath.path) { 85 | let Contents = try? FileManager.default.contentsOfDirectory(atPath: payloadPath.path) 86 | for content in Contents! { 87 | if content.hasSuffix(".app") { 88 | appNameInPayload = content 89 | return true 90 | } 91 | } 92 | } 93 | return false 94 | } 95 | 96 | func checkInfoPlist() -> Bool { 97 | if FileManager.default.fileExists(atPath: InfoPlistPath!.path) { 98 | return true 99 | } 100 | return false 101 | } 102 | 103 | func removeInvalidFile() { 104 | do { 105 | try FileManager.default.removeItem(atPath: fileDir.path) 106 | try FileManager.default.removeItem(atPath: destination.path) 107 | } catch { 108 | print(error.localizedDescription) 109 | } 110 | } 111 | 112 | } 113 | -------------------------------------------------------------------------------- /permasigneriOS/DirectoryPath.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DirectoryPath.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/6. 6 | // 7 | 8 | import UIKit 9 | 10 | // Referencee from Lakr Aream on 2022/1/7. 11 | 12 | let signerAppPath = URL(fileURLWithPath: "/Applications/permasigneriOS.app") 13 | 14 | let availableDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 15 | 16 | let documentsDirectory = availableDirectories[0].appendingPathComponent("permasigneriOS") 17 | 18 | let tmpDirectory = documentsDirectory.appendingPathComponent("tmp") 19 | 20 | let DebApplicationsDirectory = tmpDirectory.appendingPathComponent("deb/Applications") 21 | 22 | let DebDebianDirectory = tmpDirectory.appendingPathComponent("deb/DEBIAN") 23 | 24 | let OutputPackageDirectory = documentsDirectory.appendingPathComponent("Package") 25 | 26 | func setPathAndTmp() { 27 | if documentsDirectory.path.count < 2 { 28 | fatalError("malformed system resources") 29 | } 30 | // Everytime app opened try create Document folder and tmp 31 | try? FileManager.default.createDirectory( 32 | at: documentsDirectory, 33 | withIntermediateDirectories: true, 34 | attributes: nil 35 | ) 36 | // Delete tmp and recreate 37 | try? FileManager.default.removeItem(at: tmpDirectory) 38 | try? FileManager.default.createDirectory( 39 | at: tmpDirectory, 40 | withIntermediateDirectories: true, 41 | attributes: nil 42 | ) 43 | FileManager.default.changeCurrentDirectoryPath(documentsDirectory.path) 44 | } 45 | -------------------------------------------------------------------------------- /permasigneriOS/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // AboutMe 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | import UIKit 11 | 12 | // SwipeBack Support 13 | extension UINavigationController: UIGestureRecognizerDelegate { 14 | override open func viewDidLoad() { 15 | super.viewDidLoad() 16 | interactivePopGestureRecognizer?.delegate = self 17 | } 18 | 19 | public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 20 | return viewControllers.count > 1 21 | } 22 | } 23 | 24 | // Press anywhere to hide keyboard 25 | extension View { 26 | func hideKeyboard() { 27 | UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) 28 | } 29 | } 30 | 31 | extension View { 32 | @ViewBuilder func isHidden(_ isHidden: Bool) -> some View { 33 | if isHidden { 34 | self.hidden() 35 | } else { 36 | self 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /permasigneriOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIApplicationSceneManifest 6 | 7 | UIApplicationSupportsMultipleScenes 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /permasigneriOS/Launch Screen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /permasigneriOS/OpenInFilza.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExportFileAlert.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/7. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | import UIKit 11 | 12 | 13 | func checkFilza() -> Bool { 14 | let urlString = "filza:///var/mobile//Documents" 15 | if let url = URL(string: urlString),UIApplication.shared.canOpenURL(url) { 16 | return true 17 | } 18 | return false 19 | } 20 | -------------------------------------------------------------------------------- /permasigneriOS/PackToDeb.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PackToDeb.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/6. 6 | // 7 | 8 | import Foundation 9 | import AuxiliaryExecute 10 | 11 | class Progress: ObservableObject { 12 | private init() { } 13 | static let shared = Progress() 14 | 15 | var OutputDebFilePath = "" 16 | @Published var ProgressingDescribe = "" 17 | @Published var CustomDebDescription = "" 18 | 19 | var AppNameDir = "" 20 | 21 | func resetDebFolder() { 22 | try? FileManager.default.removeItem(at: tmpDirectory.appendingPathComponent("deb")) 23 | } 24 | 25 | func prepareDebFolder() { 26 | // Create Deb Folder and Output Folder 27 | try? FileManager.default.createDirectory( 28 | at: DebApplicationsDirectory, 29 | withIntermediateDirectories: true, 30 | attributes: nil 31 | ) 32 | try? FileManager.default.createDirectory( 33 | at: DebDebianDirectory, 34 | withIntermediateDirectories: true, 35 | attributes: nil 36 | ) 37 | try? FileManager.default.createDirectory( 38 | at: OutputPackageDirectory, 39 | withIntermediateDirectories: true, 40 | attributes: nil 41 | ) 42 | } 43 | 44 | func copyResourcesAndReplace() { 45 | // Control File 46 | if let controlFileURL = Bundle.main.url(forResource: "control", withExtension: "") { 47 | try? FileManager.default.copyItem(at: controlFileURL, to: DebDebianDirectory.appendingPathComponent("control")) 48 | do { 49 | var newControlFileText = try String(contentsOf: controlFileURL, encoding: .utf8) 50 | newControlFileText = newControlFileText.replacingOccurrences(of: "{APP_NAME}", with: CheckApp.shared.custom_app_name) 51 | newControlFileText = newControlFileText.replacingOccurrences(of: "{APP_BUNDLE}", with: CheckApp.shared.custom_app_bundle) 52 | newControlFileText = newControlFileText.replacingOccurrences(of: "{APP_VERSION}", with: CheckApp.shared.app_version) 53 | newControlFileText = newControlFileText.replacingOccurrences(of: "{APP_MIN_IOS}", with: CheckApp.shared.app_min_ios) 54 | newControlFileText = newControlFileText.replacingOccurrences(of: "{APP_AUTHOR}", with: CheckApp.shared.app_author) 55 | if CustomDebDescription != "" { 56 | newControlFileText = newControlFileText.replacingOccurrences(of: "App resigned with Linus Henze's CoreTrust bypass so it doesn't expire.", with: CustomDebDescription) 57 | } 58 | try newControlFileText.write(to: DebDebianDirectory.appendingPathComponent("control"), atomically: true, encoding: .utf8) 59 | } 60 | catch { 61 | print(error.localizedDescription) 62 | } 63 | } 64 | // Postinst File 65 | if let postinstFileURL = Bundle.main.url(forResource: "postinst", withExtension: "") { 66 | try? FileManager.default.copyItem(at: postinstFileURL, to: DebDebianDirectory.appendingPathComponent("postinst")) 67 | do { 68 | var newPostinstFileText = try String(contentsOf: postinstFileURL, encoding: .utf8) 69 | newPostinstFileText = newPostinstFileText.replacingOccurrences(of: "{APP_NAME}", with: CheckApp.shared.custom_app_executable) 70 | try newPostinstFileText.write(to: DebDebianDirectory.appendingPathComponent("postinst"), atomically: true, encoding: .utf8) 71 | } 72 | catch { 73 | print(error.localizedDescription) 74 | } 75 | } 76 | // Postrm File 77 | if let postrmFileURL = Bundle.main.url(forResource: "postrm", withExtension: "") { 78 | try? FileManager.default.copyItem(at: postrmFileURL, to: DebDebianDirectory.appendingPathComponent("postrm")) 79 | do { 80 | var newPostrmFileText = try String(contentsOf: postrmFileURL, encoding: .utf8) 81 | newPostrmFileText = newPostrmFileText.replacingOccurrences(of: "{APP_NAME}", with: CheckApp.shared.custom_app_executable) 82 | try newPostrmFileText.write(to: DebDebianDirectory.appendingPathComponent("postrm"), atomically: true, encoding: .utf8) 83 | } 84 | catch { 85 | print(error.localizedDescription) 86 | } 87 | } 88 | // Entitilements 89 | // copy origin to tmp dir then rewrite and sign with it 90 | if let entitlementsFileURL = Bundle.main.url(forResource: "entitlements", withExtension: ".plist") { 91 | try? FileManager.default.copyItem(at: entitlementsFileURL, to: tmpDirectory.appendingPathComponent("entitlements.plist")) 92 | 93 | let plistDict = NSMutableDictionary(contentsOfFile: tmpDirectory.appendingPathComponent("entitlements.plist").path) 94 | plistDict!.setObject(CheckApp.shared.custom_app_bundle, forKey: "application-identifier" as NSCopying) 95 | plistDict!.write(toFile: tmpDirectory.appendingPathComponent("entitlements.plist").path, atomically: false) 96 | 97 | plistDict!.setObject(["group.\(CheckApp.shared.custom_app_bundle)"], forKey: "com.apple.security.application-groups" as NSCopying) 98 | plistDict!.write(toFile: tmpDirectory.appendingPathComponent("entitlements.plist").path, atomically: false) 99 | 100 | plistDict!.setObject([CheckApp.shared.custom_app_bundle], forKey: "keychain-access-groups" as NSCopying) 101 | plistDict!.write(toFile: tmpDirectory.appendingPathComponent("entitlements.plist").path, atomically: false) 102 | } 103 | // Info.plist 104 | // get Info in plist file 105 | AppNameDir = CheckApp.shared.appNameInPayload.replacingOccurrences(of: CheckApp.shared.app_executable!, with: CheckApp.shared.custom_app_executable) 106 | let InfoPlistPathInTmpPayload = CheckApp.shared.payloadPath.appendingPathComponent("\(CheckApp.shared.appNameInPayload)/Info.plist") 107 | if let PlistScriptFileURL = Bundle.main.url(forResource: "Plist", withExtension: "sh") { 108 | try? FileManager.default.copyItem(at: PlistScriptFileURL, to: tmpDirectory.appendingPathComponent("Plist.sh")) 109 | do { 110 | var newPlistScriptText = try String(contentsOf: PlistScriptFileURL, encoding: .utf8) 111 | newPlistScriptText = newPlistScriptText.replacingOccurrences(of: "{MY_PLIST_PATH}", with: InfoPlistPathInTmpPayload.path) 112 | newPlistScriptText = newPlistScriptText.replacingOccurrences(of: "{OLD_VALUE}", with: CheckApp.shared.app_bundle) 113 | newPlistScriptText = newPlistScriptText.replacingOccurrences(of: "{NEW_VALUE}", with: CheckApp.shared.custom_app_bundle) 114 | try newPlistScriptText.write(to: tmpDirectory.appendingPathComponent("Plist.sh"), atomically: true, encoding: .utf8) 115 | } 116 | catch { 117 | print(error.localizedDescription) 118 | } 119 | } 120 | let plistDict = NSMutableDictionary(contentsOfFile: InfoPlistPathInTmpPayload.path) 121 | plistDict!.setObject(CheckApp.shared.custom_app_name, forKey: "CFBundleDisplayName" as NSCopying) 122 | plistDict!.write(toFile: CheckApp.shared.payloadPath.appendingPathComponent("\(CheckApp.shared.appNameInPayload)/Info.plist").path, atomically: false) 123 | 124 | AuxiliaryExecute.local.bash(command: "bash \(tmpDirectory.path)/Plist.sh") 125 | } 126 | 127 | func copyAppContent() { 128 | try? FileManager.default.copyItem(at: CheckApp.shared.payloadPath.appendingPathComponent(CheckApp.shared.appNameInPayload), to: DebApplicationsDirectory.appendingPathComponent(AppNameDir)) 129 | } 130 | 131 | func ChangeDebPermisson() { 132 | // Scripts parts 133 | // /var/mobile/Documents/permasigneriOS/tmp/deb/DEBIAN/* 134 | AuxiliaryExecute.local.bash(command: "chmod 0755 \(DebDebianDirectory.path)/postrm") 135 | AuxiliaryExecute.local.bash(command: "chmod 0755 \(DebDebianDirectory.path)/postinst") 136 | 137 | // app_executable 138 | // /var/mobile/Documents/permasigneriOS/tmp/deb/Applications/ex.app/ex 139 | AuxiliaryExecute.local.bash(command: "chmod 0755 \(DebApplicationsDirectory.path)/\(AppNameDir)/\(CheckApp.shared.app_executable!)") 140 | 141 | AuxiliaryExecute.local.bash(command: "chmod -R 04755 \(DebApplicationsDirectory.path)/\(AppNameDir)") 142 | } 143 | 144 | func SignAppWithLdid() { 145 | AuxiliaryExecute.local.bash(command: "ldid -S\(tmpDirectory.path)/entitlements.plist -M -K\(signerAppPath.path)/dev_certificate.p12 \(DebApplicationsDirectory.path)/\(AppNameDir)/\(CheckApp.shared.app_executable!)") 146 | AuxiliaryExecute.local.bash(command: "chmod 0755 \(DebApplicationsDirectory.path)/\(AppNameDir)/\(CheckApp.shared.app_executable!)") 147 | 148 | // ldid sign example.app 149 | AuxiliaryExecute.local.bash(command: "ldid -S\(tmpDirectory.path)/entitlements.plist -M -K\(signerAppPath.path)/dev_certificate.p12 \(DebApplicationsDirectory.path)/\(AppNameDir)") 150 | 151 | } 152 | 153 | func CheckFrameWorkDirExist() { 154 | // If exist .framework or .dylib then sign them 155 | let FrameWorkFolderPath = DebApplicationsDirectory.appendingPathComponent("\(AppNameDir)/Frameworks").path 156 | var frameworkBinaryName:String = "" 157 | if FileManager.default.fileExists(atPath: FrameWorkFolderPath) { 158 | 159 | let Contents = try? FileManager.default.contentsOfDirectory(atPath: FrameWorkFolderPath) 160 | for content in Contents! { 161 | if content.hasSuffix(".framework") { 162 | frameworkBinaryName = content.replacingOccurrences(of: ".framework", with: "") 163 | 164 | if FileManager.default.fileExists(atPath: FrameWorkFolderPath.appending("\(content)/\(frameworkBinaryName)")) { 165 | AuxiliaryExecute.local.bash(command: "ldid -K\(signerAppPath.path)/dev_certificate.p12 \(FrameWorkFolderPath)/\(content)/\(frameworkBinaryName)") 166 | } 167 | } 168 | if content.hasSuffix(".dylib"){ 169 | AuxiliaryExecute.local.bash(command: "ldid -K\(signerAppPath.path)/dev_certificate.p12 \(DebApplicationsDirectory.path)/\(AppNameDir)/Frameworks/\(content)") 170 | AuxiliaryExecute.local.bash(command: "chmod 0755 \(DebApplicationsDirectory.path)/\(AppNameDir)/Frameworks/\(content)") 171 | } 172 | } 173 | } 174 | } 175 | 176 | 177 | func PackToDeb() { 178 | AuxiliaryExecute.local.bash(command: "dpkg-deb -Zxz --root-owner-group -b \(tmpDirectory.path)/deb \(OutputPackageDirectory.path)/\(CheckApp.shared.fileName.replacingOccurrences(of: ".ipa", with: "")).deb") 179 | } 180 | 181 | func CheckDebBuild() -> Bool { 182 | if FileManager.default.fileExists(atPath: OutputPackageDirectory.appendingPathComponent("\(CheckApp.shared.fileName.replacingOccurrences(of: ".ipa", with: "")).deb").path) { 183 | OutputDebFilePath = OutputPackageDirectory.appendingPathComponent("\(CheckApp.shared.fileName.replacingOccurrences(of: ".ipa", with: "")).deb").path 184 | return true 185 | } else { 186 | return false} 187 | } 188 | 189 | func permanentSignButtonFunc() { 190 | ProgressingDescribe = "[1/8] Clearing folder" 191 | resetDebFolder() 192 | 193 | ProgressingDescribe = "[2/8] Preparing folder" 194 | prepareDebFolder() 195 | 196 | ProgressingDescribe = "[3/8] Copying Resources" 197 | copyResourcesAndReplace() 198 | 199 | ProgressingDescribe = "[4/8] Copying app contents" 200 | copyAppContent() 201 | 202 | ProgressingDescribe = "[5/8] Setting permissions" 203 | ChangeDebPermisson() 204 | 205 | ProgressingDescribe = "[6/8] Signing with ldid" 206 | SignAppWithLdid() 207 | 208 | ProgressingDescribe = "[7/8] Checking frameworks" 209 | CheckFrameWorkDirExist() 210 | 211 | ProgressingDescribe = "[8/8] Packing to deb" 212 | PackToDeb() 213 | 214 | ProgressingDescribe = "" 215 | } 216 | } 217 | -------------------------------------------------------------------------------- /permasigneriOS/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /permasigneriOS/Resources/Plist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ######################################## BASH LIB ####################################### 3 | bash.string.replace() { 4 | local text="$1" find="$2" replace="$3"; 5 | 6 | echo "${text}" | while IFS= read -r line; do 7 | printf '%s\n' "${line//"$find"/$replace}"; 8 | done 9 | } 10 | ######################################## BASH LIB ####################################### 11 | 12 | ######################################## APPLE LIB ###################################### 13 | apple.plist.read() { 14 | local filepath="${1}" 15 | 16 | defaults read "${filepath}" 17 | } 18 | apple.plist.convert.to.xml() { 19 | local filepath="${1}" tmp="${2}" 20 | 21 | # If second argument is passed, then we save the conversion to a new file rather than write over the original 22 | if [[ "${tmp}" == "true" ]]; then 23 | tmp="/tmp${filepath}" 24 | fi 25 | 26 | if [[ "${tmp}" != "" ]]; then 27 | bash.cp "${filepath}" "${tmp}" 28 | 29 | filepath="${tmp}" 30 | fi 31 | 32 | plutil -convert xml1 "${filepath}" 33 | 34 | # We also output the content which can be supressed if desired by caller 35 | cat "${filepath}" 36 | } 37 | apple.plist.convert.to.binary() { 38 | local filepath="${1}" 39 | 40 | plutil -convert binary1 "${filepath}" 41 | } 42 | apple.plist.write() { 43 | local filepath="$1" text="$2" 44 | 45 | echo "${text}" > "${filepath}" 46 | 47 | apple.plist.convert.to.binary "${filepath}" # Not sure if this step is neccessary, if xml representation is enough. Not verified or tested without. 48 | } 49 | apple.plist.read.search.replace.write() { 50 | local file="${1}" search="${2}" replacement="${3}" 51 | 52 | local updated=$(bash.string.replace "$(apple.plist.read "${file}")" "${search}" "${replacement}") 53 | 54 | apple.plist.write "${file}" "${updated}" 55 | } 56 | ######################################## APPLE LIB ###################################### 57 | 58 | 59 | ######################################## EXAMPLE ################################## 60 | #my.test.1() { 61 | # apple.plist.read.search.replace.write "/tmp/com.apple.finder.plist" "/Users/" "/Home/" 62 | #} 63 | ######################################## EXAMPLE ################################## 64 | 65 | apple.plist.read.search.replace.write {MY_PLIST_PATH} {OLD_VALUE} {NEW_VALUE} 66 | -------------------------------------------------------------------------------- /permasigneriOS/Resources/control: -------------------------------------------------------------------------------- 1 | Package: {APP_BUNDLE} 2 | Version: {APP_VERSION} 3 | Section: Applications 4 | Architecture: iphoneos-arm 5 | Depends: firmware (>={APP_MIN_IOS}) 6 | Description: App resigned with Linus Henze's CoreTrust bypass so it doesn't expire. 7 | Name: {APP_NAME} 8 | Author: {APP_AUTHOR} 9 | Maintainer: {APP_AUTHOR} 10 | Tags: compatible_min::ios{APP_MIN_IOS} 11 | -------------------------------------------------------------------------------- /permasigneriOS/Resources/dev_certificate.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/powenn/permasigneriOS/7b63215da3dbe054a45feb1fe49f1fc94ce1c98a/permasigneriOS/Resources/dev_certificate.p12 -------------------------------------------------------------------------------- /permasigneriOS/Resources/entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.iokit-user-client-class 6 | 7 | IOUserClient 8 | 9 | platform-application 10 | 11 | get-task-allow 12 | 13 | keychain-access-groups 14 | 15 | {APP_BUNDLE} 16 | 17 | application-identifier 18 | {APP_BUNDLE} 19 | aps-environment 20 | production 21 | com.apple.developer.usernotifications.time-sensitive 22 | 23 | com.apple.security.application-groups 24 | 25 | group.{APP_BUNDLE} 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /permasigneriOS/Resources/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | uicache -p /Applications/{APP_NAME}.app 3 | -------------------------------------------------------------------------------- /permasigneriOS/Resources/postrm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | uicache -p /Applications/{APP_NAME}.app 3 | -------------------------------------------------------------------------------- /permasigneriOS/Views/AppInfoView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfoView.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct AppInfoView: View { 11 | let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String 12 | let buildVer = Bundle.main.infoDictionary?["CFBundleVersion"] as? String 13 | 14 | @State var cleanFolderDone:Bool = false 15 | @State var showCantOpenInFilza:Bool = false 16 | @State var showCredits:Bool = false 17 | 18 | var body: some View { 19 | Form{ 20 | Section(header: Text("version")){ 21 | Text("\(appVersion!).\(buildVer!)") 22 | } 23 | Section(header: Text("Source Code")){ 24 | Link(destination: URL(string: "https://github.com/powenn/permasigneriOS")!, label: { 25 | HStack{ 26 | Text("View on Github") 27 | Spacer() 28 | Image("GithubIcon") 29 | .resizable() 30 | .frame(width: 32.0, height: 32.0, alignment: .leading) 31 | } 32 | }) 33 | Link(destination: URL(string: "https://github.com/powenn/permasigneriOS/issues?q=")!, label: { 34 | Text("Check issues on Github") 35 | }) 36 | } 37 | Button(action: {showCredits.toggle()}, label: { 38 | Text("Credits") 39 | }) 40 | .sheet(isPresented: $showCredits, content: {CreditsView()}) 41 | Button(action: { 42 | if !checkFilza() { 43 | showCantOpenInFilza.toggle() 44 | } else { 45 | showCantOpenInFilza = false 46 | UIApplication.shared.open(URL(string: "filza://\(documentsDirectory)")!) 47 | } 48 | }, label: { 49 | Text("Open Package Folder in Filza") 50 | }) 51 | .alert(isPresented: $showCantOpenInFilza, content: { 52 | Alert(title: Text("Oh no"), message: Text("You need Filza to view the file"),dismissButton: .default(Text("Okay"))) 53 | }) 54 | 55 | Button(action: { 56 | try? FileManager.default.removeItem(at: OutputPackageDirectory) 57 | setPathAndTmp() 58 | cleanFolderDone.toggle() 59 | }, label: { 60 | Text("Clear All Packages") 61 | }) 62 | .alert(isPresented: $cleanFolderDone,content: { 63 | Alert(title: Text("Done"), message: Text("All packages in Package Folder have been removed"), dismissButton: .default(Text("Okay"))) 64 | }) 65 | Section(footer: Text("Document Folder Path\n/var/mobile/Documents/permasigneriOS\n\nPlease be patient during the sign process,\nespecially signing a complex app with\nlots of frameworks\n\nIf you're having problems, please check Github issues before asking\n\nThis is iOS ported of itsnebulalol's permasigner"), content: {}) 66 | } 67 | } 68 | } 69 | 70 | struct AppInfoView_Previews: PreviewProvider { 71 | static var previews: some View { 72 | AppInfoView() 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /permasigneriOS/Views/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | @Environment(\.layoutDirection) var direction 12 | var body: some View { 13 | TabView{ 14 | SignView() 15 | .tabItem({ 16 | Label("Sign", systemImage: "signature") 17 | }) 18 | AppInfoView() 19 | .tabItem({ 20 | Label("App Info", systemImage: "info.circle.fill") 21 | }) 22 | } 23 | .environment(\.layoutDirection, direction) 24 | .onAppear(perform: { 25 | // Setup basic path and tmp **DirectoryPath.Swift** 26 | setPathAndTmp() 27 | }) 28 | } 29 | } 30 | 31 | struct ContentView_Previews: PreviewProvider { 32 | static var previews: some View { 33 | ContentView() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /permasigneriOS/Views/CreditsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CreditsView.swift 3 | // permasigneriOS 4 | // 5 | // Created by Lilly on 11/07/2022. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct GitHubView: View { 11 | let name: String 12 | let username: String 13 | 14 | var body: some View { 15 | Link(destination: URL(string: "https://github.com/\(username)")!, label: { 16 | HStack{ 17 | Text(name) 18 | Spacer() 19 | Image("\(name)PFP") 20 | .resizable() 21 | .frame(width: 32.0, height: 32.0, alignment: .leading) 22 | .clipShape(Circle()) 23 | } 24 | }) 25 | } 26 | } 27 | 28 | struct CreditsView: View { 29 | var body: some View { 30 | Form { 31 | Section(header: Text("Permasigner-iOS Developer")) { 32 | GitHubView(name: "Powen", username: "powenn") 33 | } 34 | 35 | Section(header: Text("Original Permasigner Developer")) { 36 | GitHubView(name: "itsnebulalol", username: "itsnebulalol") 37 | } 38 | 39 | Section(header: Text("CoreTrust exploit")) { 40 | GitHubView(name: "Linus Henze", username: "LinusHenze") 41 | GitHubView(name: "Zhuowei", username: "zhuowei") 42 | } 43 | 44 | Section(header: Text("Help and code contribution")) { 45 | GitHubView(name: "Lakr233", username: "Lakr233") 46 | GitHubView(name: "Paisseon", username: "Paisseon") 47 | GitHubView(name: "fullpwn", username: "fullpwn") 48 | } 49 | } 50 | } 51 | } 52 | 53 | struct CreditsView_Previews: PreviewProvider { 54 | static var previews: some View { 55 | CreditsView() 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /permasigneriOS/Views/SignView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignView.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import SwiftUI 9 | import UniformTypeIdentifiers 10 | import AuxiliaryExecute 11 | import ZipArchive 12 | 13 | struct SignView: View { 14 | @StateObject var progress: Progress = .shared 15 | @StateObject var checkapp: CheckApp = .shared 16 | 17 | @State var isImporting: Bool = false 18 | @State var showAlert:Bool = false 19 | @State var alertTitle:String = "" 20 | @State var alertMeaasge:String = "" 21 | 22 | @State var showInFilzaAlert:Bool = false 23 | @State var canShowinFilza:Bool = false 24 | 25 | @State var ShowCustomInfo:Bool = false 26 | 27 | func signFailedAlert(title:String, message:String) { 28 | checkapp.fileName = "" 29 | alertTitle = title 30 | alertMeaasge = message 31 | showAlert.toggle() 32 | } 33 | 34 | var body: some View { 35 | VStack { 36 | Text(checkapp.fileName != "" ? "\(checkapp.fileName)" : "No .ipa file selected") 37 | Button(action: { 38 | if isImporting { 39 | isImporting = false 40 | DispatchQueue.main.asyncAfter(deadline: .now()+0.2, execute: { 41 | isImporting = true 42 | }) 43 | } else { 44 | isImporting = true 45 | } 46 | }, label: {Text("Select File")}) 47 | .alert(isPresented: $showAlert) { 48 | Alert(title: Text(alertTitle), message: Text(alertMeaasge), dismissButton: .default(Text("OK"))) 49 | } 50 | .disabled(progress.ProgressingDescribe != "") 51 | .fileImporter( 52 | isPresented: $isImporting, 53 | allowedContentTypes: [UTType(filenameExtension: "ipa")!], 54 | allowsMultipleSelection: false 55 | ) { result in 56 | do { 57 | let fileUrl = try result.get() 58 | checkapp.fileName = fileUrl.first!.lastPathComponent 59 | checkapp.filePath = fileUrl.first!.path 60 | 61 | checkapp.extractIpa() 62 | 63 | if checkapp.checkIsIpaPayloadValid() { 64 | checkapp.InfoPlistPath = checkapp.payloadPath.appendingPathComponent("\(checkapp.appNameInPayload)/Info.plist") 65 | if checkapp.checkInfoPlist() { 66 | checkapp.getInfoPlistValue() 67 | if checkapp.validInfoPlist { 68 | print("Valid Info.plist") 69 | } else { 70 | checkapp.app_executable = nil 71 | signFailedAlert(title: "No executable found.", message: "Missing executable in Info.plist") 72 | } 73 | } 74 | } else { 75 | signFailedAlert(title: "iPA is not valid!", message: "The file may have missing parts\nor invalid contents") 76 | } 77 | isImporting = false 78 | } catch { 79 | print(error.localizedDescription) 80 | } 81 | } 82 | .padding() 83 | 84 | Button(action: { 85 | ShowCustomInfo.toggle() 86 | }, label: { 87 | Text("Custom Info") 88 | }).sheet(isPresented: $ShowCustomInfo, content: { 89 | CustomInfoView() 90 | }).disabled(checkapp.fileName == "" || progress.ProgressingDescribe != "" || isImporting) 91 | 92 | Button(action: { 93 | DispatchQueue.global(qos: .userInitiated).async { 94 | progress.permanentSignButtonFunc() 95 | DispatchQueue.main.asyncAfter(deadline: .now()) { 96 | if progress.CheckDebBuild() { 97 | if checkFilza() { 98 | canShowinFilza = true 99 | } else { canShowinFilza = false } 100 | checkapp.fileName = "" 101 | showInFilzaAlert.toggle() 102 | 103 | } else { 104 | signFailedAlert(title: "Sign Failed", message: "Please try other .ipa files") 105 | } 106 | } 107 | } 108 | }, label: {Text(progress.ProgressingDescribe == "" ? "Permanent sign" : progress.ProgressingDescribe)}) 109 | .alert(isPresented: $showInFilzaAlert ){ 110 | Alert( 111 | title: Text(canShowinFilza ? "Done" : "Oh no"), 112 | message: Text(canShowinFilza ? "View the file now?" : "You need Filza to view the file"), 113 | primaryButton: .default(Text("Okay")) { 114 | if canShowinFilza { 115 | UIApplication.shared.open(URL(string: "filza://\(progress.OutputDebFilePath)")!) 116 | } 117 | }, 118 | secondaryButton: .cancel() 119 | ) 120 | } 121 | .disabled(checkapp.fileName == "") 122 | .opacity(checkapp.fileName == "" ? 0.6 : 1.0) 123 | .buttonStyle(SignButtonStyle()) 124 | 125 | if isImporting { 126 | ProgressView(label: { 127 | Text("Importing iPA file") 128 | }) 129 | .padding() 130 | } 131 | } 132 | .padding() 133 | } 134 | } 135 | 136 | 137 | struct CustomInfoView: View { 138 | @StateObject var checkapp: CheckApp = .shared 139 | @StateObject var progress: Progress = .shared 140 | @Environment(\.presentationMode) var presentationMode 141 | 142 | var body: some View { 143 | VStack{ 144 | VStack(alignment: .leading) { 145 | Text("Customize App Name") 146 | TextField("App Name", text: $checkapp.custom_app_name) 147 | .textFieldStyle(.roundedBorder) 148 | Text("Customize App Package Name\n(The name of .app directory)") 149 | TextField("App Package Name", text: $checkapp.custom_app_executable) 150 | .textFieldStyle(.roundedBorder) 151 | Text("Customize App Bundle") 152 | TextField("App Bundle", text: $checkapp.custom_app_bundle) 153 | .textFieldStyle(.roundedBorder) 154 | Text("Customize .deb file description\n( Leave blank to use default )") 155 | TextField("Description", text: $progress.CustomDebDescription) 156 | .textFieldStyle(.roundedBorder) 157 | Text("\nIf you want to prevent original apps being replaced,\nIt is recommended to modify like this\n\nExampleApp2\nExampleApp2\ncom.example.exampleapp2\n\nWARNING:PLEASE MAKE SURE THE NAME\nIS NOT AS SAME AS THE SYSTEM APP NAMES") 158 | .font(.footnote) 159 | .foregroundColor(.gray) 160 | }.padding() 161 | Button(action: { 162 | self.presentationMode.wrappedValue.dismiss() 163 | }, label: { 164 | Text("Done") 165 | }).padding() 166 | } 167 | .padding() 168 | .onTapGesture { 169 | hideKeyboard() 170 | } 171 | } 172 | } 173 | 174 | 175 | struct SignView_Previews: PreviewProvider { 176 | static var previews: some View { 177 | SignView() 178 | CustomInfoView() 179 | } 180 | } 181 | 182 | -------------------------------------------------------------------------------- /permasigneriOS/permasigneriOSApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // permasigneriOSApp.swift 3 | // permasigneriOS 4 | // 5 | // Created by 蕭博文 on 2022/7/5. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct permasigneriOSApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | --------------------------------------------------------------------------------