3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "SSZipArchive.h"
14 | #import "SSZipCommon.h"
15 | #import "ZipArchive.h"
16 |
17 | FOUNDATION_EXPORT double SSZipArchiveVersionNumber;
18 | FOUNDATION_EXPORT const unsigned char SSZipArchiveVersionString[];
19 |
20 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SSZipArchive/SSZipArchive.modulemap:
--------------------------------------------------------------------------------
1 | framework module SSZipArchive {
2 | umbrella header "SSZipArchive-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/SSZipArchive/SSZipArchive.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SSZipArchive
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
5 | OTHER_LDFLAGS = -l"z"
6 | PODS_BUILD_DIR = $BUILD_DIR
7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_ROOT = ${SRCROOT}
9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSZipArchive
10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
11 | SKIP_INSTALL = YES
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > I'm archiving this repo. After all these years this is probably not the best way to do
2 | > things anymore. If you disagree I'd be happy to put a link to your fork here.
3 |
4 | ipatool
5 | =======
6 |
7 | Quick Start
8 | -----------
9 |
10 | 1. Download and extract latest release sources (or clone master)
11 | 2. Inside the source folder, run the shell script `./buildAndInstall.sh`
12 |
13 | This will install ipatool in `/usr/local/bin`. You can easily customize the installation
14 | location by editing the script.
15 |
16 | You can now run it by executing `/usr/local/bin/ipatool`. See below for details on
17 | command line options.
18 |
19 | Introduction
20 | ------------
21 | Command line utility to query iOS IPA files and to resign an IPA with a new provisioning
22 | profile (and optionally a new bundle identifier). Sample use cases:
23 |
24 | * Check expiration of enterprise-signed IPAs so that you know when you have to ship
25 | new releases to your customers.
26 | * Resign enterprise-signed IPA that has expired with a new provisioning profile.
27 | * Resign appstore-signed IPA with enterprise provisioning profile, so that you can
28 | test the actual binary that you will upload to Apple.
29 |
30 | Since this is a command line utility, you can of course use it in continuous integration
31 | setups such as Jenkins etc.
32 |
33 | Query IPA files
34 | ---------------
35 | Invocation: `ipatool myapp.ipa`
36 |
37 | Sample output:
38 |
39 | App name: My App.app
40 | Display name: My App
41 | Version: 1.0
42 | Build: 21
43 | Bundle identifier: com.example.myapp
44 | Code sign authority: iPhone Distribution: Example Inc.
45 | Minimum OS version: 6.0
46 | Device family: iphone ipad
47 |
48 | Provisioning:
49 | Name: My App - AppStore
50 | Expiration: Fri Dec 11 10:22:40 CET 2013
51 | App ID name: My App
52 | Team: Example Team
53 |
54 |
55 | Resign IPA files
56 | ----------------
57 | Invocation: `ipatool myapp.ipa resign enterpriseprof.mobileprovision com.example.enterprise.myapp`
58 |
59 | This invocation will resign the IPA using the provisioning profile found in
60 | `enterpriseprof.mobileprovision`. In the process, it will change the bundle identifier
61 | to `com.example.enterprise.myapp`.
62 |
63 | Note for Developers
64 | ===================
65 | The unit tests work on an actual ipa that is also part of this project. It is built using
66 | a shell script build phase in the `ipatoolTests` target. This means that it will be
67 | code-signed using your own certificate and provisioning profile.
68 |
69 | The tests check whether the code signing that this `SampleApp.ipa` has matches what is
70 | expected. Since this will be different for everybody, the expected values are put in
71 | `testConfig.json`. In order for the tests to pass, you will have to modify
72 | `testConfig.json` so that it contains the values that are valid for you.
73 |
74 | Wiki
75 | ====
76 | Please refer to the wiki for more information on [Managing Archives and Code Signing with
77 | xcodebuild](https://github.com/svdo/ipatool/wiki/Managing-Archives-and-Code-Signing-with-xodebuild).
78 |
79 | TODO
80 | ====
81 | * Use `IPT` class prefix everywhere instead of `IT`.
82 |
--------------------------------------------------------------------------------
/SampleApp/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // SampleApp
4 | //
5 | // Created by Stefan on 28/11/14.
6 | // Copyright (c) 2014 Stefan van den Oord. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/SampleApp/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/SampleApp/Base.lproj/Main.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 |
--------------------------------------------------------------------------------
/SampleApp/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/SampleApp/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | Sample!
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | com.vandenoord.$(PRODUCT_NAME:rfc1034identifier)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UIRequiredDeviceCapabilities
32 |
33 | armv7
34 |
35 | UISupportedInterfaceOrientations
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationLandscapeLeft
39 | UIInterfaceOrientationLandscapeRight
40 |
41 | UISupportedInterfaceOrientations~ipad
42 |
43 | UIInterfaceOrientationPortrait
44 | UIInterfaceOrientationPortraitUpsideDown
45 | UIInterfaceOrientationLandscapeLeft
46 | UIInterfaceOrientationLandscapeRight
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/SampleApp/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // SampleApp
4 | //
5 | // Created by Stefan on 28/11/14.
6 | // Copyright (c) 2014 Stefan van den Oord. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view, typically from a nib.
16 | }
17 |
18 | override func didReceiveMemoryWarning() {
19 | super.didReceiveMemoryWarning()
20 | // Dispose of any resources that can be recreated.
21 | }
22 |
23 |
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/buildAndInstall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export DSTROOT=
4 | xcodebuild -workspace ipatool.xcworkspace -scheme ipatool -configuration Release install
5 | if [ -d "$DSTROOT/tmp/ipatool.dst" ]; then
6 | echo "Copy $DSTROOT/tmp/ipatool.dst/usr/local/bin/ipatool to $DSTROOT/usr/local/bin/ipatool"
7 | ditto "$DSTROOT/tmp/ipatool.dst/usr/local/bin/ipatool" "$DSTROOT/usr/local/bin/ipatool"
8 | fi
9 |
10 | echo
11 | echo "Installed ipatool in $DSTROOT/usr/local/bin"
12 |
--------------------------------------------------------------------------------
/ipatool-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import
2 |
--------------------------------------------------------------------------------
/ipatool.xcodeproj/xcshareddata/xcschemes/SampleApp.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
67 |
68 |
78 |
80 |
86 |
87 |
88 |
89 |
90 |
91 |
97 |
99 |
105 |
106 |
107 |
108 |
110 |
111 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/ipatool.xcodeproj/xcshareddata/xcschemes/ipatool.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
68 |
69 |
72 |
73 |
76 |
77 |
80 |
81 |
84 |
85 |
88 |
89 |
92 |
93 |
94 |
95 |
96 |
97 |
103 |
105 |
111 |
112 |
113 |
114 |
116 |
117 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/ipatool.xcodeproj/xcshareddata/xcschemes/ipatoolTests.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
65 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/ipatool.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------