sigh 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +4 -6
 - data/bin/sigh +16 -1
 - data/lib/assets/resign.sh +201 -71
 - data/lib/sigh/resign.rb +19 -12
 - data/lib/sigh/runner.rb +1 -1
 - data/lib/sigh/version.rb +1 -1
 - metadata +5 -5
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 310f1a18571628069c1c4730cdce58d7ba17d2a2
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e44e6ea604939d78861cc77179be6c9822ecdc3e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fb2d7905de6218ce67bf8b2d22cdb8869f6017c1d58b2e7c5679eaf36add7a0913ceade5f2fe750537da80c847bcec30ee59e54ac860737991040ce0bd9167de
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 77141a2f7120b3e7f8058ad0efacd5c7e394cca0991b9639081d10236eb7b6146f327f65e1902fb37980710c11b4fea2c17a58e19b2a4d3e986621577ea77a80
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -13,17 +13,16 @@ 
     | 
|
| 
       13 
13 
     | 
    
         
             
              <b>sigh</b> • 
         
     | 
| 
       14 
14 
     | 
    
         
             
              <a href="https://github.com/KrauseFx/produce">produce</a> •
         
     | 
| 
       15 
15 
     | 
    
         
             
              <a href="https://github.com/KrauseFx/cert">cert</a> •
         
     | 
| 
       16 
     | 
    
         
            -
              <a href="https://github.com/KrauseFx/codes">codes</a> •
         
     | 
| 
       17 
16 
     | 
    
         
             
              <a href="https://github.com/fastlane/spaceship">spaceship</a> •
         
     | 
| 
       18 
17 
     | 
    
         
             
              <a href="https://github.com/fastlane/pilot">pilot</a> •
         
     | 
| 
       19 
18 
     | 
    
         
             
              <a href="https://github.com/fastlane/boarding">boarding</a> •
         
     | 
| 
       20 
     | 
    
         
            -
              <a href="https://github.com/fastlane/gym">gym</a>
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
              <a href="https://github.com/fastlane/gym">gym</a> •
         
     | 
| 
      
 20 
     | 
    
         
            +
              <a href="https://github.com/fastlane/scan">scan</a>
         
     | 
| 
       22 
21 
     | 
    
         
             
            </p>
         
     | 
| 
       23 
22 
     | 
    
         
             
            -------
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
24 
     | 
    
         
             
            <p align="center">
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
              <img src="assets/sigh.png" height="110">
         
     | 
| 
       27 
26 
     | 
    
         
             
            </p>
         
     | 
| 
       28 
27 
     | 
    
         | 
| 
       29 
28 
     | 
    
         
             
            sigh
         
     | 
| 
         @@ -202,12 +201,11 @@ If you're using [cert](https://github.com/KrauseFx/cert) in combination with [fa 
     | 
|
| 
       202 
201 
     | 
    
         
             
            - [`PEM`](https://github.com/KrauseFx/pem): Automatically generate and renew your push notification profiles
         
     | 
| 
       203 
202 
     | 
    
         
             
            - [`produce`](https://github.com/KrauseFx/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
         
     | 
| 
       204 
203 
     | 
    
         
             
            - [`cert`](https://github.com/KrauseFx/cert): Automatically create and maintain iOS code signing certificates
         
     | 
| 
       205 
     | 
    
         
            -
            - [`codes`](https://github.com/KrauseFx/codes): Create promo codes for iOS Apps using the command line
         
     | 
| 
       206 
204 
     | 
    
         
             
            - [`spaceship`](https://github.com/fastlane/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
         
     | 
| 
       207 
205 
     | 
    
         
             
            - [`pilot`](https://github.com/fastlane/pilot): The best way to manage your TestFlight testers and builds from your terminal
         
     | 
| 
       208 
206 
     | 
    
         
             
            - [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers 
         
     | 
| 
       209 
207 
     | 
    
         
             
            - [`gym`](https://github.com/fastlane/gym): Building your iOS apps has never been easier
         
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
      
 208 
     | 
    
         
            +
            - [`scan`](https://github.com/fastlane/scan): The easiest way to run tests of your iOS and Mac app
         
     | 
| 
       211 
209 
     | 
    
         | 
| 
       212 
210 
     | 
    
         
             
            ##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
         
     | 
| 
       213 
211 
     | 
    
         | 
    
        data/bin/sigh
    CHANGED
    
    | 
         @@ -60,7 +60,10 @@ class SighApplication 
     | 
|
| 
       60 
60 
     | 
    
         
             
                  c.syntax = 'sigh resign'
         
     | 
| 
       61 
61 
     | 
    
         
             
                  c.description = 'Resigns an existing ipa file with the given provisioning profile'
         
     | 
| 
       62 
62 
     | 
    
         
             
                  c.option '-i', '--signing_identity STRING', String, 'The signing identity to use. Must match the one defined in the provisioning profile.'
         
     | 
| 
       63 
     | 
    
         
            -
                  c.option '-p', '--provisioning_profile  
     | 
| 
      
 63 
     | 
    
         
            +
                  c.option '-p', '--provisioning_profile PATH', String, '(or BUNDLE_ID=PATH) The path to the provisioning profile which should be used.'\
         
     | 
| 
      
 64 
     | 
    
         
            +
                           'Can be provided multiple times if the application contains nested applications and app extensions, which need their own provisioning profile.'\
         
     | 
| 
      
 65 
     | 
    
         
            +
                           'The path may be prefixed with a identifier in order to determine which provisioning profile should be used on which app.',
         
     | 
| 
      
 66 
     | 
    
         
            +
                           &multiple_values_option_proc(c, "provisioning_profile", &proc { |value| value.split('=', 2) })
         
     | 
| 
       64 
67 
     | 
    
         | 
| 
       65 
68 
     | 
    
         
             
                  c.action do |args, options|
         
     | 
| 
       66 
69 
     | 
    
         
             
                    Sigh::Resign.new.run(options, args)
         
     | 
| 
         @@ -85,6 +88,18 @@ class SighApplication 
     | 
|
| 
       85 
88 
     | 
    
         | 
| 
       86 
89 
     | 
    
         
             
                run!
         
     | 
| 
       87 
90 
     | 
    
         
             
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
              def multiple_values_option_proc(command, name)
         
     | 
| 
      
 93 
     | 
    
         
            +
                proc do |value|
         
     | 
| 
      
 94 
     | 
    
         
            +
                  value = yield(value) if block_given?
         
     | 
| 
      
 95 
     | 
    
         
            +
                  option = command.proxy_options.find { |opt| opt[0] == name } || []
         
     | 
| 
      
 96 
     | 
    
         
            +
                  values = option[1] || []
         
     | 
| 
      
 97 
     | 
    
         
            +
                  values << value
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  command.proxy_options.delete option
         
     | 
| 
      
 100 
     | 
    
         
            +
                  command.proxy_options << [name, values]
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
       88 
103 
     | 
    
         
             
            end
         
     | 
| 
       89 
104 
     | 
    
         | 
| 
       90 
105 
     | 
    
         
             
            begin
         
     | 
    
        data/lib/assets/resign.sh
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            #!/bin/bash
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            # Copyright (c) 2011 Float Mobile Learning
         
     | 
| 
       4 
4 
     | 
    
         
             
            # http://www.floatlearning.com/
         
     | 
| 
         @@ -12,6 +12,8 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
            # Extended by John Turnipseed and Matthew Nespor, November 2014
         
     | 
| 
       13 
13 
     | 
    
         
             
            # http://nanonation.net/
         
     | 
| 
       14 
14 
     | 
    
         
             
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            # Extended by Nicolas Bachschmidt, October 2015
         
     | 
| 
      
 16 
     | 
    
         
            +
            #
         
     | 
| 
       15 
17 
     | 
    
         
             
            # Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
       16 
18 
     | 
    
         
             
            # a copy of this software and associated documentation files (the "Software"),
         
     | 
| 
       17 
19 
     | 
    
         
             
            # to deal in the Software without restriction, including without limitation
         
     | 
| 
         @@ -31,7 +33,7 @@ 
     | 
|
| 
       31 
33 
     | 
    
         
             
            # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
       32 
34 
     | 
    
         
             
            #
         
     | 
| 
       33 
35 
     | 
    
         
             
            # Please let us know about any improvements you make to this script!
         
     | 
| 
       34 
     | 
    
         
            -
            # ./floatsign source "iPhone Distribution: Name" -p "path/to/profile" [-d "display name"]  [-e entitlements] [-k keychain] -b "BundleIdentifier" outputIpa
         
     | 
| 
      
 36 
     | 
    
         
            +
            # ./floatsign source "iPhone Distribution: Name" -p "path/to/profile" [-d "display name"]  [-e entitlements] [-k keychain] [-b "BundleIdentifier"] outputIpa
         
     | 
| 
       35 
37 
     | 
    
         
             
            #
         
     | 
| 
       36 
38 
     | 
    
         
             
            #
         
     | 
| 
       37 
39 
     | 
    
         
             
            # Modifed 26th January 2012
         
     | 
| 
         @@ -50,6 +52,11 @@ 
     | 
|
| 
       50 
52 
     | 
    
         
             
            # 4. renamed 'temp' directory and made it a variable so it can be easily modified
         
     | 
| 
       51 
53 
     | 
    
         
             
            # 5. various code formatting and logging adjustments
         
     | 
| 
       52 
54 
     | 
    
         
             
            # 
         
     | 
| 
      
 55 
     | 
    
         
            +
            # new features October 2015
         
     | 
| 
      
 56 
     | 
    
         
            +
            # 1. now re-signs nested applications and app extensions, if present, prior to re-signing the application itself
         
     | 
| 
      
 57 
     | 
    
         
            +
            # 2. enables the -p option to be used more than once
         
     | 
| 
      
 58 
     | 
    
         
            +
            # 2. ensures the provisioning profile's bundle-identifier matches the app's bundle identifier
         
     | 
| 
      
 59 
     | 
    
         
            +
            #
         
     | 
| 
       53 
60 
     | 
    
         | 
| 
       54 
61 
     | 
    
         | 
| 
       55 
62 
     | 
    
         
             
            function checkStatus {
         
     | 
| 
         @@ -62,24 +69,24 @@ fi 
     | 
|
| 
       62 
69 
     | 
    
         
             
            }
         
     | 
| 
       63 
70 
     | 
    
         | 
| 
       64 
71 
     | 
    
         
             
            if [ $# -lt 3 ]; then
         
     | 
| 
       65 
     | 
    
         
            -
                echo "usage: $0 source identity -p provisioning [-e entitlements] [-r adjustBetaReports] [-d displayName] [-n version] -b bundleId outputIpa" >&2
         
     | 
| 
       66 
     | 
    
         
            -
                echo "       -p  
     | 
| 
       67 
     | 
    
         
            -
                echo "       -r flag requires a value '-r yes'"
         
     | 
| 
      
 72 
     | 
    
         
            +
                echo "usage: $0 source identity -p provisioning [-e entitlements] [-r adjustBetaReports] [-d displayName] [-n version] [-b bundleId] outputIpa" >&2
         
     | 
| 
      
 73 
     | 
    
         
            +
                echo "       -p option may be provided multiple times" >&2
         
     | 
| 
      
 74 
     | 
    
         
            +
                echo "       -r flag requires a value '-r yes'" >&2
         
     | 
| 
       68 
75 
     | 
    
         
             
                echo "       -r flag is ignored if -e is also used" >&2
         
     | 
| 
       69 
76 
     | 
    
         
             
                exit 1
         
     | 
| 
       70 
77 
     | 
    
         
             
            fi
         
     | 
| 
       71 
78 
     | 
    
         | 
| 
       72 
79 
     | 
    
         
             
            ORIGINAL_FILE="$1"
         
     | 
| 
       73 
80 
     | 
    
         
             
            CERTIFICATE="$2"
         
     | 
| 
       74 
     | 
    
         
            -
            NEW_PROVISION=
         
     | 
| 
       75 
81 
     | 
    
         
             
            ENTITLEMENTS=
         
     | 
| 
       76 
82 
     | 
    
         
             
            BUNDLE_IDENTIFIER=""
         
     | 
| 
       77 
83 
     | 
    
         
             
            DISPLAY_NAME=""
         
     | 
| 
       78 
     | 
    
         
            -
            APP_IDENTIFER_PREFIX=""
         
     | 
| 
       79 
     | 
    
         
            -
            TEAM_IDENTIFIER=""
         
     | 
| 
       80 
84 
     | 
    
         
             
            KEYCHAIN=""
         
     | 
| 
       81 
85 
     | 
    
         
             
            VERSION_NUMBER=""
         
     | 
| 
       82 
86 
     | 
    
         
             
            ADJUST_BETA_REPORTS_ACTIVE_FLAG="0"
         
     | 
| 
      
 87 
     | 
    
         
            +
            RAW_PROVISIONS=()
         
     | 
| 
      
 88 
     | 
    
         
            +
            PROVISIONS_BY_ID=()
         
     | 
| 
      
 89 
     | 
    
         
            +
            DEFAULT_PROVISION=""
         
     | 
| 
       83 
90 
     | 
    
         
             
            TEMP_DIR="_floatsignTemp"
         
     | 
| 
       84 
91 
     | 
    
         | 
| 
       85 
92 
     | 
    
         
             
            # options start index
         
     | 
| 
         @@ -87,8 +94,12 @@ OPTIND=3 
     | 
|
| 
       87 
94 
     | 
    
         
             
            while getopts p:d:e:k:b:r:n: opt; do
         
     | 
| 
       88 
95 
     | 
    
         
             
                case $opt in
         
     | 
| 
       89 
96 
     | 
    
         
             
                    p)
         
     | 
| 
       90 
     | 
    
         
            -
                         
     | 
| 
       91 
     | 
    
         
            -
                         
     | 
| 
      
 97 
     | 
    
         
            +
                        RAW_PROVISIONS+=("$OPTARG")
         
     | 
| 
      
 98 
     | 
    
         
            +
                        if [[ "$OPTARG" =~ .+=.+ ]]; then
         
     | 
| 
      
 99 
     | 
    
         
            +
                            echo "Specified provisioning profile: '${OPTARG#*=}' for bundle identifier: '${OPTARG%%=*}'" >&2
         
     | 
| 
      
 100 
     | 
    
         
            +
                        else
         
     | 
| 
      
 101 
     | 
    
         
            +
                            echo "Specified provisioning profile: '$OPTARG'" >&2
         
     | 
| 
      
 102 
     | 
    
         
            +
                        fi
         
     | 
| 
       92 
103 
     | 
    
         
             
                        ;;
         
     | 
| 
       93 
104 
     | 
    
         
             
                    d)
         
     | 
| 
       94 
105 
     | 
    
         
             
                        DISPLAY_NAME="$OPTARG"
         
     | 
| 
         @@ -134,6 +145,10 @@ then 
     | 
|
| 
       134 
145 
     | 
    
         
             
                exit 1
         
     | 
| 
       135 
146 
     | 
    
         
             
            fi
         
     | 
| 
       136 
147 
     | 
    
         | 
| 
      
 148 
     | 
    
         
            +
            if [[ "${#RAW_PROVISIONS[*]}" == "0" ]]; then
         
     | 
| 
      
 149 
     | 
    
         
            +
                echo "-p 'xxxx.mobileprovision' argument is required" >&2
         
     | 
| 
      
 150 
     | 
    
         
            +
                exit 1;
         
     | 
| 
      
 151 
     | 
    
         
            +
            fi
         
     | 
| 
       137 
152 
     | 
    
         | 
| 
       138 
153 
     | 
    
         
             
            # Check for and remove the temporary directory if it already exists
         
     | 
| 
       139 
154 
     | 
    
         
             
            if [ -d "$TEMP_DIR" ]; 
         
     | 
| 
         @@ -178,24 +193,140 @@ APP_NAME=$(ls "$TEMP_DIR/Payload/") 
     | 
|
| 
       178 
193 
     | 
    
         
             
            # Make sure that PATH includes the location of the PlistBuddy helper tool as its location is not standard
         
     | 
| 
       179 
194 
     | 
    
         
             
            export PATH=$PATH:/usr/libexec
         
     | 
| 
       180 
195 
     | 
    
         | 
| 
      
 196 
     | 
    
         
            +
            # Test whether two bundle identifiers match
         
     | 
| 
      
 197 
     | 
    
         
            +
            # The first one may contain the wildcard character '*', in which case pattern matching will be used unless the third parameter is "STRICT"
         
     | 
| 
      
 198 
     | 
    
         
            +
            function does_bundle_id_match {
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
            if [[ "$1" == "$2" ]]; then
         
     | 
| 
      
 201 
     | 
    
         
            +
                return 0
         
     | 
| 
      
 202 
     | 
    
         
            +
            elif [[ "$3" != STRICT && "$1" =~ \* ]]; then
         
     | 
| 
      
 203 
     | 
    
         
            +
                local PATTERN0="${1//\./\\.}"       # com.example.*     -> com\.example\.*
         
     | 
| 
      
 204 
     | 
    
         
            +
                local PATTERN1="${PATTERN0//\*/.*}" # com\.example\.*   -> com\.example\..*
         
     | 
| 
      
 205 
     | 
    
         
            +
                if [[ "$2" =~ ^$PATTERN1$ ]]; then
         
     | 
| 
      
 206 
     | 
    
         
            +
                    return 0
         
     | 
| 
      
 207 
     | 
    
         
            +
                fi
         
     | 
| 
      
 208 
     | 
    
         
            +
            fi
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
            return 1
         
     | 
| 
      
 211 
     | 
    
         
            +
            }
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
            # Find the provisioning profile for a given bundle identifier
         
     | 
| 
      
 214 
     | 
    
         
            +
            function provision_for_bundle_id {
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            for ARG in "${PROVISIONS_BY_ID[@]}"; do
         
     | 
| 
      
 217 
     | 
    
         
            +
                if does_bundle_id_match "${ARG%%=*}" "$1" "$2"; then
         
     | 
| 
      
 218 
     | 
    
         
            +
                    echo "${ARG#*=}"
         
     | 
| 
      
 219 
     | 
    
         
            +
                    break
         
     | 
| 
      
 220 
     | 
    
         
            +
                fi
         
     | 
| 
      
 221 
     | 
    
         
            +
            done
         
     | 
| 
      
 222 
     | 
    
         
            +
            }
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            # Find the bundle identifier contained inside a provisioning profile
         
     | 
| 
      
 225 
     | 
    
         
            +
            function bundle_id_for_provison {
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
            local FULL_BUNDLE_ID=`PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i "$1")`
         
     | 
| 
      
 228 
     | 
    
         
            +
            checkStatus
         
     | 
| 
      
 229 
     | 
    
         
            +
            echo "${FULL_BUNDLE_ID#*.}"
         
     | 
| 
      
 230 
     | 
    
         
            +
            }
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
            # Add given provisioning profile and bundle identifier to the search list
         
     | 
| 
      
 233 
     | 
    
         
            +
            function add_provision_for_bundle_id {
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
            local PROVISION="$1"
         
     | 
| 
      
 236 
     | 
    
         
            +
            local BUNDLE_ID="$2"
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
            local CURRENT_PROVISION=`provision_for_bundle_id "$BUNDLE_ID" STRICT`
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
            if [[ "$CURRENT_PROVISION" != "" && "$CURRENT_PROVISION" != "$PROVISION" ]]; then
         
     | 
| 
      
 241 
     | 
    
         
            +
                echo "Conflicting provisioning profiles '$PROVISION' and '$CURRENT_PROVISION' for bundle identifier '$BUNDLE_ID'." >&2
         
     | 
| 
      
 242 
     | 
    
         
            +
                exit 1
         
     | 
| 
      
 243 
     | 
    
         
            +
            fi
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            PROVISIONS_BY_ID+=("$BUNDLE_ID=$PROVISION")
         
     | 
| 
      
 246 
     | 
    
         
            +
            }
         
     | 
| 
      
 247 
     | 
    
         
            +
             
     | 
| 
      
 248 
     | 
    
         
            +
            # Add given provisioning profile to the search list
         
     | 
| 
      
 249 
     | 
    
         
            +
            function add_provision {
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
            local PROVISION="$1"
         
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
      
 253 
     | 
    
         
            +
            if [[ "$1" =~ .+=.+ ]]; then
         
     | 
| 
      
 254 
     | 
    
         
            +
                PROVISION="${1#*=}"
         
     | 
| 
      
 255 
     | 
    
         
            +
                add_provision_for_bundle_id "$PROVISION" "${1%%=*}"
         
     | 
| 
      
 256 
     | 
    
         
            +
            elif [[ "$DEFAULT_PROVISION" == "" ]]; then
         
     | 
| 
      
 257 
     | 
    
         
            +
                DEFAULT_PROVISION="$PROVISION"
         
     | 
| 
      
 258 
     | 
    
         
            +
            fi
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
            if [[ ! -e "$PROVISION" ]]; then
         
     | 
| 
      
 261 
     | 
    
         
            +
                echo "Provisioning profile '$PROVISION' file does not exist" >&2
         
     | 
| 
      
 262 
     | 
    
         
            +
                exit 1;
         
     | 
| 
      
 263 
     | 
    
         
            +
            fi
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
            local BUNDLE_ID=`bundle_id_for_provison "$PROVISION"`
         
     | 
| 
      
 266 
     | 
    
         
            +
            add_provision_for_bundle_id "$PROVISION" "$BUNDLE_ID"
         
     | 
| 
      
 267 
     | 
    
         
            +
            }
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            # Load bundle identifiers from provisioning profiles
         
     | 
| 
      
 270 
     | 
    
         
            +
            for ARG in "${RAW_PROVISIONS[@]}"; do
         
     | 
| 
      
 271 
     | 
    
         
            +
                add_provision "$ARG"
         
     | 
| 
      
 272 
     | 
    
         
            +
            done
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
      
 274 
     | 
    
         
            +
            # Resign the given application
         
     | 
| 
      
 275 
     | 
    
         
            +
            function resign {
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
            local APP_PATH="$1"
         
     | 
| 
      
 278 
     | 
    
         
            +
            local NESTED="$2"
         
     | 
| 
      
 279 
     | 
    
         
            +
            local BUNDLE_IDENTIFIER="$BUNDLE_IDENTIFIER"
         
     | 
| 
      
 280 
     | 
    
         
            +
            local NEW_PROVISION="$NEW_PROVISION"
         
     | 
| 
      
 281 
     | 
    
         
            +
            local APP_IDENTIFER_PREFIX=""
         
     | 
| 
      
 282 
     | 
    
         
            +
            local TEAM_IDENTIFIER=""
         
     | 
| 
      
 283 
     | 
    
         
            +
             
     | 
| 
      
 284 
     | 
    
         
            +
            if [[ "$NESTED" == NESTED ]]; then
         
     | 
| 
      
 285 
     | 
    
         
            +
                # Ignore bundle identifier for nested applications
         
     | 
| 
      
 286 
     | 
    
         
            +
                BUNDLE_IDENTIFIER=""
         
     | 
| 
      
 287 
     | 
    
         
            +
            fi
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
       181 
289 
     | 
    
         
             
            # Make sure that the Info.plist file is where we expect it
         
     | 
| 
       182 
     | 
    
         
            -
            if [ ! -e "$ 
     | 
| 
      
 290 
     | 
    
         
            +
            if [ ! -e "$APP_PATH/Info.plist" ];
         
     | 
| 
       183 
291 
     | 
    
         
             
            then
         
     | 
| 
       184 
     | 
    
         
            -
                echo "Expected file does not exist: '$ 
     | 
| 
      
 292 
     | 
    
         
            +
                echo "Expected file does not exist: '$APP_PATH/Info.plist'" >&2
         
     | 
| 
       185 
293 
     | 
    
         
             
                exit 1;
         
     | 
| 
       186 
294 
     | 
    
         
             
            fi
         
     | 
| 
       187 
295 
     | 
    
         | 
| 
       188 
296 
     | 
    
         
             
            # Read in current values from the app
         
     | 
| 
       189 
     | 
    
         
            -
            CURRENT_NAME=`PlistBuddy -c "Print :CFBundleDisplayName" "$ 
     | 
| 
       190 
     | 
    
         
            -
            CURRENT_BUNDLE_IDENTIFIER=`PlistBuddy -c "Print :CFBundleIdentifier" "$ 
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                 
     | 
| 
      
 297 
     | 
    
         
            +
            local CURRENT_NAME=`PlistBuddy -c "Print :CFBundleDisplayName" "$APP_PATH/Info.plist"`
         
     | 
| 
      
 298 
     | 
    
         
            +
            local CURRENT_BUNDLE_IDENTIFIER=`PlistBuddy -c "Print :CFBundleIdentifier" "$APP_PATH/Info.plist"`
         
     | 
| 
      
 299 
     | 
    
         
            +
            local NEW_PROVISION=`provision_for_bundle_id "${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}"`
         
     | 
| 
      
 300 
     | 
    
         
            +
             
     | 
| 
      
 301 
     | 
    
         
            +
            if [[ "$NEW_PROVISION" == "" && "$NESTED" != NESTED ]]; then
         
     | 
| 
      
 302 
     | 
    
         
            +
                NEW_PROVISION="$DEFAULT_PROVISION"
         
     | 
| 
      
 303 
     | 
    
         
            +
            fi
         
     | 
| 
      
 304 
     | 
    
         
            +
             
     | 
| 
      
 305 
     | 
    
         
            +
            if [[ "$NEW_PROVISION" == "" ]]; then
         
     | 
| 
      
 306 
     | 
    
         
            +
                if [[ "$NESTED" == NESTED ]]; then
         
     | 
| 
      
 307 
     | 
    
         
            +
                    echo "No provisioning profile for nested application: '$APP_PATH' with bundle identifier '${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}'" >&2
         
     | 
| 
      
 308 
     | 
    
         
            +
                else
         
     | 
| 
      
 309 
     | 
    
         
            +
                    echo "No provisioning profile for application: '$APP_PATH' with bundle identifier '${BUNDLE_IDENTIFIER:-$CURRENT_BUNDLE_IDENTIFIER}'" >&2
         
     | 
| 
      
 310 
     | 
    
         
            +
                fi
         
     | 
| 
      
 311 
     | 
    
         
            +
                echo "Use the -p option (example: -p com.example.app=xxxx.mobileprovision)" >&2
         
     | 
| 
      
 312 
     | 
    
         
            +
                exit 1;
         
     | 
| 
      
 313 
     | 
    
         
            +
            fi
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
            local PROVISION_BUNDLE_IDENTIFIER=`bundle_id_for_provison "$NEW_PROVISION"`
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
            # Use provisioning profile's bundle identifier
         
     | 
| 
      
 318 
     | 
    
         
            +
            if [ "$BUNDLE_IDENTIFIER" == "" ]; then
         
     | 
| 
      
 319 
     | 
    
         
            +
                if [[ "$PROVISION_BUNDLE_IDENTIFIER" =~ \* ]]; then
         
     | 
| 
       195 
320 
     | 
    
         
             
                    echo "Bundle Identifier contains a *, using the current bundle identifier" >&2
         
     | 
| 
       196 
     | 
    
         
            -
                    BUNDLE_IDENTIFIER 
     | 
| 
      
 321 
     | 
    
         
            +
                    BUNDLE_IDENTIFIER="$CURRENT_BUNDLE_IDENTIFIER"
         
     | 
| 
      
 322 
     | 
    
         
            +
                else
         
     | 
| 
      
 323 
     | 
    
         
            +
                    BUNDLE_IDENTIFIER="$PROVISION_BUNDLE_IDENTIFIER"
         
     | 
| 
       197 
324 
     | 
    
         
             
                fi
         
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
      
 325 
     | 
    
         
            +
            fi
         
     | 
| 
      
 326 
     | 
    
         
            +
             
     | 
| 
      
 327 
     | 
    
         
            +
            if ! does_bundle_id_match "$PROVISION_BUNDLE_IDENTIFIER" "$BUNDLE_IDENTIFIER"; then
         
     | 
| 
      
 328 
     | 
    
         
            +
                echo "Bundle Identifier '$PROVISION_BUNDLE_IDENTIFIER' in provisioning profile '$NEW_PROVISION' does not match the Bundle Identifier '$BUNDLE_IDENTIFIER' for application '$APP_PATH'." >&2
         
     | 
| 
      
 329 
     | 
    
         
            +
                exit 1
         
     | 
| 
       199 
330 
     | 
    
         
             
            fi
         
     | 
| 
       200 
331 
     | 
    
         | 
| 
       201 
332 
     | 
    
         
             
            echo "Current bundle identifier is: '$CURRENT_BUNDLE_IDENTIFIER'" >&2
         
     | 
| 
         @@ -207,81 +338,69 @@ then 
     | 
|
| 
       207 
338 
     | 
    
         
             
                if [ "${DISPLAY_NAME}" != "${CURRENT_NAME}" ];
         
     | 
| 
       208 
339 
     | 
    
         
             
                then
         
     | 
| 
       209 
340 
     | 
    
         
             
                    echo "Changing display name from '$CURRENT_NAME' to '$DISPLAY_NAME'" >&2
         
     | 
| 
       210 
     | 
    
         
            -
                    `PlistBuddy -c "Set :CFBundleDisplayName $DISPLAY_NAME" "$ 
     | 
| 
      
 341 
     | 
    
         
            +
                    `PlistBuddy -c "Set :CFBundleDisplayName $DISPLAY_NAME" "$APP_PATH/Info.plist"`
         
     | 
| 
       211 
342 
     | 
    
         
             
                fi
         
     | 
| 
       212 
343 
     | 
    
         
             
            fi
         
     | 
| 
       213 
344 
     | 
    
         | 
| 
       214 
345 
     | 
    
         
             
            # Replace the embedded mobile provisioning profile
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
      
 346 
     | 
    
         
            +
            echo "Validating the new provisioning profile: $NEW_PROVISION" >&2
         
     | 
| 
      
 347 
     | 
    
         
            +
            security cms -D -i "$NEW_PROVISION" > "$TEMP_DIR/profile.plist"
         
     | 
| 
      
 348 
     | 
    
         
            +
            checkStatus
         
     | 
| 
      
 349 
     | 
    
         
            +
             
     | 
| 
      
 350 
     | 
    
         
            +
            APP_IDENTIFER_PREFIX=`PlistBuddy -c "Print :Entitlements:application-identifier" "$TEMP_DIR/profile.plist" | grep -E '^[A-Z0-9]*' -o | tr -d '\n'` 
         
     | 
| 
      
 351 
     | 
    
         
            +
            if [ "$APP_IDENTIFER_PREFIX" == "" ];
         
     | 
| 
       216 
352 
     | 
    
         
             
            then
         
     | 
| 
       217 
     | 
    
         
            -
                 
     | 
| 
      
 353 
     | 
    
         
            +
                APP_IDENTIFER_PREFIX=`PlistBuddy -c "Print :ApplicationIdentifierPrefix:0" "$TEMP_DIR/profile.plist"` 
         
     | 
| 
      
 354 
     | 
    
         
            +
                if [ "$APP_IDENTIFER_PREFIX" == "" ];
         
     | 
| 
       218 
355 
     | 
    
         
             
                then
         
     | 
| 
       219 
     | 
    
         
            -
                    echo " 
     | 
| 
       220 
     | 
    
         
            -
                     
     | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
             
     | 
| 
       227 
     | 
    
         
            -
                        if [ "$APP_IDENTIFER_PREFIX" == "" ];
         
     | 
| 
       228 
     | 
    
         
            -
                        then
         
     | 
| 
       229 
     | 
    
         
            -
                            echo "Failed to extract any app identifier prefix from '$NEW_PROVISION'" >&2
         
     | 
| 
       230 
     | 
    
         
            -
                            exit 1;
         
     | 
| 
       231 
     | 
    
         
            -
                        else
         
     | 
| 
       232 
     | 
    
         
            -
                            echo "WARNING: extracted an app identifier prefix '$APP_IDENTIFER_PREFIX' from '$NEW_PROVISION', but it was not found in the profile's entitlements" >&2
         
     | 
| 
       233 
     | 
    
         
            -
                        fi
         
     | 
| 
       234 
     | 
    
         
            -
                    else
         
     | 
| 
       235 
     | 
    
         
            -
                        echo "Profile app identifier prefix is '$APP_IDENTIFER_PREFIX'" >&2
         
     | 
| 
       236 
     | 
    
         
            -
                    fi
         
     | 
| 
       237 
     | 
    
         
            -
                    
         
     | 
| 
       238 
     | 
    
         
            -
                    TEAM_IDENTIFIER=`PlistBuddy -c "Print :Entitlements:com.apple.developer.team-identifier" "$TEMP_DIR/profile.plist" | tr -d '\n'` 
         
     | 
| 
       239 
     | 
    
         
            -
                    if [ "$TEAM_IDENTIFIER" == "" ];
         
     | 
| 
       240 
     | 
    
         
            -
                    then
         
     | 
| 
       241 
     | 
    
         
            -
                        TEAM_IDENTIFIER=`PlistBuddy -c "Print :TeamIdentifier:0" "$TEMP_DIR/profile.plist"` 
         
     | 
| 
       242 
     | 
    
         
            -
                        if [ "$TEAM_IDENTIFIER" == "" ];
         
     | 
| 
       243 
     | 
    
         
            -
                        then
         
     | 
| 
       244 
     | 
    
         
            -
                            echo "Failed to extract team identifier from '$NEW_PROVISION', resigned ipa may fail on iOS 8 and higher" >&2
         
     | 
| 
       245 
     | 
    
         
            -
                        else
         
     | 
| 
       246 
     | 
    
         
            -
                            echo "WARNING: extracted a team identifier '$TEAM_IDENTIFIER' from '$NEW_PROVISION', but it was not found in the profile's entitlements, resigned ipa may fail on iOS 8 and higher" >&2
         
     | 
| 
       247 
     | 
    
         
            -
                        fi
         
     | 
| 
       248 
     | 
    
         
            -
                    else
         
     | 
| 
       249 
     | 
    
         
            -
                        echo "Profile team identifier is '$TEAM_IDENTIFIER'" >&2
         
     | 
| 
       250 
     | 
    
         
            -
                    fi
         
     | 
| 
      
 356 
     | 
    
         
            +
                    echo "Failed to extract any app identifier prefix from '$NEW_PROVISION'" >&2
         
     | 
| 
      
 357 
     | 
    
         
            +
                    exit 1;
         
     | 
| 
      
 358 
     | 
    
         
            +
                else
         
     | 
| 
      
 359 
     | 
    
         
            +
                    echo "WARNING: extracted an app identifier prefix '$APP_IDENTIFER_PREFIX' from '$NEW_PROVISION', but it was not found in the profile's entitlements" >&2
         
     | 
| 
      
 360 
     | 
    
         
            +
                fi
         
     | 
| 
      
 361 
     | 
    
         
            +
            else
         
     | 
| 
      
 362 
     | 
    
         
            +
                echo "Profile app identifier prefix is '$APP_IDENTIFER_PREFIX'" >&2
         
     | 
| 
      
 363 
     | 
    
         
            +
            fi
         
     | 
| 
       251 
364 
     | 
    
         | 
| 
       252 
     | 
    
         
            -
             
     | 
| 
      
 365 
     | 
    
         
            +
            TEAM_IDENTIFIER=`PlistBuddy -c "Print :Entitlements:com.apple.developer.team-identifier" "$TEMP_DIR/profile.plist" | tr -d '\n'` 
         
     | 
| 
      
 366 
     | 
    
         
            +
            if [ "$TEAM_IDENTIFIER" == "" ];
         
     | 
| 
      
 367 
     | 
    
         
            +
            then
         
     | 
| 
      
 368 
     | 
    
         
            +
                TEAM_IDENTIFIER=`PlistBuddy -c "Print :TeamIdentifier:0" "$TEMP_DIR/profile.plist"` 
         
     | 
| 
      
 369 
     | 
    
         
            +
                if [ "$TEAM_IDENTIFIER" == "" ];
         
     | 
| 
      
 370 
     | 
    
         
            +
                then
         
     | 
| 
      
 371 
     | 
    
         
            +
                    echo "Failed to extract team identifier from '$NEW_PROVISION', resigned ipa may fail on iOS 8 and higher" >&2
         
     | 
| 
       253 
372 
     | 
    
         
             
                else
         
     | 
| 
       254 
     | 
    
         
            -
                    echo " 
     | 
| 
       255 
     | 
    
         
            -
                    exit 1;
         
     | 
| 
      
 373 
     | 
    
         
            +
                    echo "WARNING: extracted a team identifier '$TEAM_IDENTIFIER' from '$NEW_PROVISION', but it was not found in the profile's entitlements, resigned ipa may fail on iOS 8 and higher" >&2
         
     | 
| 
       256 
374 
     | 
    
         
             
                fi
         
     | 
| 
       257 
375 
     | 
    
         
             
            else
         
     | 
| 
       258 
     | 
    
         
            -
                echo " 
     | 
| 
       259 
     | 
    
         
            -
                exit 1;
         
     | 
| 
      
 376 
     | 
    
         
            +
                echo "Profile team identifier is '$TEAM_IDENTIFIER'" >&2
         
     | 
| 
       260 
377 
     | 
    
         
             
            fi
         
     | 
| 
       261 
378 
     | 
    
         | 
| 
      
 379 
     | 
    
         
            +
            cp "$NEW_PROVISION" "$APP_PATH/embedded.mobileprovision"
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
       262 
381 
     | 
    
         | 
| 
       263 
382 
     | 
    
         
             
            #if the current bundle identifier is different from the new one in the provisioning profile, then change it.
         
     | 
| 
       264 
383 
     | 
    
         
             
            if [ "$CURRENT_BUNDLE_IDENTIFIER" != "$BUNDLE_IDENTIFIER" ];
         
     | 
| 
       265 
384 
     | 
    
         
             
            then
         
     | 
| 
       266 
385 
     | 
    
         
             
                echo "Updating the bundle identifier from '$CURRENT_BUNDLE_IDENTIFIER' to '$BUNDLE_IDENTIFIER'" >&2
         
     | 
| 
       267 
     | 
    
         
            -
                `PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_IDENTIFIER" "$ 
     | 
| 
      
 386 
     | 
    
         
            +
                `PlistBuddy -c "Set :CFBundleIdentifier $BUNDLE_IDENTIFIER" "$APP_PATH/Info.plist"`
         
     | 
| 
       268 
387 
     | 
    
         
             
                checkStatus
         
     | 
| 
       269 
388 
     | 
    
         
             
            fi
         
     | 
| 
       270 
389 
     | 
    
         | 
| 
       271 
390 
     | 
    
         
             
            # Update the version number properties in the Info.plist if a version number has been provided
         
     | 
| 
       272 
391 
     | 
    
         
             
            if [ "$VERSION_NUMBER" != "" ];
         
     | 
| 
       273 
392 
     | 
    
         
             
            then
         
     | 
| 
       274 
     | 
    
         
            -
                CURRENT_VERSION_NUMBER=`PlistBuddy -c "Print :CFBundleVersion" "$ 
     | 
| 
      
 393 
     | 
    
         
            +
                CURRENT_VERSION_NUMBER=`PlistBuddy -c "Print :CFBundleVersion" "$APP_PATH/Info.plist"`
         
     | 
| 
       275 
394 
     | 
    
         
             
                if [ "$VERSION_NUMBER" != "$CURRENT_VERSION_NUMBER" ];
         
     | 
| 
       276 
395 
     | 
    
         
             
                then
         
     | 
| 
       277 
396 
     | 
    
         
             
                    echo "Updating the version from '$CURRENT_VERSION_NUMBER' to '$VERSION_NUMBER'" >&2
         
     | 
| 
       278 
     | 
    
         
            -
                    `PlistBuddy -c "Set :CFBundleVersion $VERSION_NUMBER" "$ 
     | 
| 
       279 
     | 
    
         
            -
                    `PlistBuddy -c "Set :CFBundleShortVersionString $VERSION_NUMBER" "$ 
     | 
| 
      
 397 
     | 
    
         
            +
                    `PlistBuddy -c "Set :CFBundleVersion $VERSION_NUMBER" "$APP_PATH/Info.plist"`
         
     | 
| 
      
 398 
     | 
    
         
            +
                    `PlistBuddy -c "Set :CFBundleShortVersionString $VERSION_NUMBER" "$APP_PATH/Info.plist"`
         
     | 
| 
       280 
399 
     | 
    
         
             
                fi
         
     | 
| 
       281 
400 
     | 
    
         
             
            fi
         
     | 
| 
       282 
401 
     | 
    
         | 
| 
       283 
402 
     | 
    
         
             
            # Check for and resign any embedded frameworks (new feature for iOS 8 and above apps)
         
     | 
| 
       284 
     | 
    
         
            -
            FRAMEWORKS_DIR="$ 
     | 
| 
      
 403 
     | 
    
         
            +
            FRAMEWORKS_DIR="$APP_PATH/Frameworks"
         
     | 
| 
       285 
404 
     | 
    
         
             
            if [ -d "$FRAMEWORKS_DIR" ];
         
     | 
| 
       286 
405 
     | 
    
         
             
            then
         
     | 
| 
       287 
406 
     | 
    
         
             
                if [ "$TEAM_IDENTIFIER" == "" ];
         
     | 
| 
         @@ -304,7 +423,6 @@ then 
     | 
|
| 
       304 
423 
     | 
    
         
             
            fi
         
     | 
| 
       305 
424 
     | 
    
         | 
| 
       306 
425 
     | 
    
         | 
| 
       307 
     | 
    
         
            -
            # Resign the application
         
     | 
| 
       308 
426 
     | 
    
         
             
            if [ "$ENTITLEMENTS" != "" ];
         
     | 
| 
       309 
427 
     | 
    
         
             
            then
         
     | 
| 
       310 
428 
     | 
    
         
             
                if [ -n "$APP_IDENTIFER_PREFIX" ];
         
     | 
| 
         @@ -339,11 +457,11 @@ then 
     | 
|
| 
       339 
457 
     | 
    
         | 
| 
       340 
458 
     | 
    
         
             
                echo "Resigning application using certificate: '$CERTIFICATE'" >&2
         
     | 
| 
       341 
459 
     | 
    
         
             
                echo "and entitlements: $ENTITLEMENTS" >&2
         
     | 
| 
       342 
     | 
    
         
            -
                /usr/bin/codesign -f -s "$CERTIFICATE" --entitlements="$ENTITLEMENTS" "$ 
     | 
| 
      
 460 
     | 
    
         
            +
                /usr/bin/codesign -f -s "$CERTIFICATE" --entitlements="$ENTITLEMENTS" "$APP_PATH"
         
     | 
| 
       343 
461 
     | 
    
         
             
                checkStatus
         
     | 
| 
       344 
462 
     | 
    
         
             
            else
         
     | 
| 
       345 
463 
     | 
    
         
             
                echo "Extracting existing entitlements for updating" >&2
         
     | 
| 
       346 
     | 
    
         
            -
                /usr/bin/codesign -d --entitlements - "$ 
     | 
| 
      
 464 
     | 
    
         
            +
                /usr/bin/codesign -d --entitlements - "$APP_PATH" > "$TEMP_DIR/newEntitlements" 2> /dev/null
         
     | 
| 
       347 
465 
     | 
    
         
             
                if [ $? -eq 0 ];
         
     | 
| 
       348 
466 
     | 
    
         
             
                then
         
     | 
| 
       349 
467 
     | 
    
         
             
                    ENTITLEMENTS_TEMP=`cat "$TEMP_DIR/newEntitlements" | sed -E -e '1d'`
         
     | 
| 
         @@ -406,7 +524,7 @@ else 
     | 
|
| 
       406 
524 
     | 
    
         
             
                            then
         
     | 
| 
       407 
525 
     | 
    
         
             
                                echo "and team identifier: '$TEAM_IDENTIFIER'" >&2
         
     | 
| 
       408 
526 
     | 
    
         
             
                            fi
         
     | 
| 
       409 
     | 
    
         
            -
                            /usr/bin/codesign -f -s "$CERTIFICATE" --entitlements="$TEMP_DIR/newEntitlements" "$ 
     | 
| 
      
 527 
     | 
    
         
            +
                            /usr/bin/codesign -f -s "$CERTIFICATE" --entitlements="$TEMP_DIR/newEntitlements" "$APP_PATH"
         
     | 
| 
       410 
528 
     | 
    
         
             
                            checkStatus
         
     | 
| 
       411 
529 
     | 
    
         
             
                        else
         
     | 
| 
       412 
530 
     | 
    
         
             
                            echo "Failed to create required intermediate file" >&2
         
     | 
| 
         @@ -416,14 +534,14 @@ else 
     | 
|
| 
       416 
534 
     | 
    
         
             
                        echo "No entitlements found" >&2
         
     | 
| 
       417 
535 
     | 
    
         
             
                        echo "Resigning application using certificate: '$CERTIFICATE'" >&2
         
     | 
| 
       418 
536 
     | 
    
         
             
                        echo "without entitlements" >&2
         
     | 
| 
       419 
     | 
    
         
            -
                        /usr/bin/codesign -f -s "$CERTIFICATE" "$ 
     | 
| 
      
 537 
     | 
    
         
            +
                        /usr/bin/codesign -f -s "$CERTIFICATE" "$APP_PATH"
         
     | 
| 
       420 
538 
     | 
    
         
             
                        checkStatus
         
     | 
| 
       421 
539 
     | 
    
         
             
                    fi
         
     | 
| 
       422 
540 
     | 
    
         
             
                else
         
     | 
| 
       423 
541 
     | 
    
         
             
                    echo "Failed to extract entitlements" >&2
         
     | 
| 
       424 
542 
     | 
    
         
             
                    echo "Resigning application using certificate: '$CERTIFICATE'" >&2
         
     | 
| 
       425 
543 
     | 
    
         
             
                    echo "without entitlements" >&2
         
     | 
| 
       426 
     | 
    
         
            -
                    /usr/bin/codesign -f -s "$CERTIFICATE" "$ 
     | 
| 
      
 544 
     | 
    
         
            +
                    /usr/bin/codesign -f -s "$CERTIFICATE" "$APP_PATH"
         
     | 
| 
       427 
545 
     | 
    
         
             
                    checkStatus
         
     | 
| 
       428 
546 
     | 
    
         
             
                fi
         
     | 
| 
       429 
547 
     | 
    
         
             
            fi
         
     | 
| 
         @@ -432,6 +550,18 @@ fi 
     | 
|
| 
       432 
550 
     | 
    
         
             
            rm -f "$TEMP_DIR/newEntitlements"
         
     | 
| 
       433 
551 
     | 
    
         
             
            rm -f "$TEMP_DIR/profile.plist"
         
     | 
| 
       434 
552 
     | 
    
         | 
| 
      
 553 
     | 
    
         
            +
            }
         
     | 
| 
      
 554 
     | 
    
         
            +
             
     | 
| 
      
 555 
     | 
    
         
            +
            # Sign nested applications and app extensions
         
     | 
| 
      
 556 
     | 
    
         
            +
            while IFS= read -d '' -r app;
         
     | 
| 
      
 557 
     | 
    
         
            +
            do
         
     | 
| 
      
 558 
     | 
    
         
            +
                echo "Resigning nested application: '$app'" >&2
         
     | 
| 
      
 559 
     | 
    
         
            +
                resign "$app" NESTED
         
     | 
| 
      
 560 
     | 
    
         
            +
            done < <(find "$TEMP_DIR/Payload/$APP_NAME" -d -mindepth 1 \( -name "*.app" -or -name "*.appex" \) -print0)
         
     | 
| 
      
 561 
     | 
    
         
            +
             
     | 
| 
      
 562 
     | 
    
         
            +
            # Resign the application
         
     | 
| 
      
 563 
     | 
    
         
            +
            resign "$TEMP_DIR/Payload/$APP_NAME"
         
     | 
| 
      
 564 
     | 
    
         
            +
             
     | 
| 
       435 
565 
     | 
    
         
             
            # Repackage quietly
         
     | 
| 
       436 
566 
     | 
    
         
             
            echo "Repackaging as $NEW_FILE" >&2
         
     | 
| 
       437 
567 
     | 
    
         | 
    
        data/lib/sigh/resign.rb
    CHANGED
    
    | 
         @@ -5,28 +5,35 @@ module Sigh 
     | 
|
| 
       5 
5 
     | 
    
         
             
              class Resign
         
     | 
| 
       6 
6 
     | 
    
         
             
                def run(options, args)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # get the command line inputs and parse those into the vars we need...
         
     | 
| 
       8 
     | 
    
         
            -
                  ipa, signing_identity,  
     | 
| 
      
 8 
     | 
    
         
            +
                  ipa, signing_identity, provisioning_profiles = get_inputs(options, args)
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  # ... then invoke out programmatic interface with these vars
         
     | 
| 
       11 
     | 
    
         
            -
                  resign(ipa, signing_identity,  
     | 
| 
      
 11 
     | 
    
         
            +
                  resign(ipa, signing_identity, provisioning_profiles)
         
     | 
| 
       12 
12 
     | 
    
         
             
                end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                def self.resign(ipa, signing_identity,  
     | 
| 
       15 
     | 
    
         
            -
                  self.new.resign(ipa, signing_identity,  
     | 
| 
      
 14 
     | 
    
         
            +
                def self.resign(ipa, signing_identity, provisioning_profiles)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  self.new.resign(ipa, signing_identity, provisioning_profiles)
         
     | 
| 
       16 
16 
     | 
    
         
             
                end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
                def resign(ipa, signing_identity,  
     | 
| 
      
 18 
     | 
    
         
            +
                def resign(ipa, signing_identity, provisioning_profiles)
         
     | 
| 
       19 
19 
     | 
    
         
             
                  resign_path = find_resign_path
         
     | 
| 
       20 
20 
     | 
    
         
             
                  signing_identity = find_signing_identity(signing_identity)
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
                  unless provisioning_profiles.kind_of?(Enumerable)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    provisioning_profiles = [provisioning_profiles]
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       22 
26 
     | 
    
         
             
                  # validate that we have valid values for all these params, we don't need to check signing_identity because `find_signing_identity` will only ever return a valid value
         
     | 
| 
       23 
     | 
    
         
            -
                  validate_params(resign_path, ipa,  
     | 
| 
      
 27 
     | 
    
         
            +
                  validate_params(resign_path, ipa, provisioning_profiles)
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  provisioning_options = provisioning_profiles.map { |fst, snd| "-p #{[fst, snd].compact.join('=')}" }.join(' ')
         
     | 
| 
       24 
30 
     | 
    
         | 
| 
       25 
31 
     | 
    
         
             
                  command = [
         
     | 
| 
       26 
32 
     | 
    
         
             
                    resign_path.shellescape,
         
     | 
| 
       27 
33 
     | 
    
         
             
                    ipa.shellescape,
         
     | 
| 
       28 
34 
     | 
    
         
             
                    signing_identity.shellescape,
         
     | 
| 
       29 
     | 
    
         
            -
                    "-r yes 
     | 
| 
      
 35 
     | 
    
         
            +
                    "-r yes",
         
     | 
| 
      
 36 
     | 
    
         
            +
                    provisioning_options,
         
     | 
| 
       30 
37 
     | 
    
         
             
                    ipa.shellescape
         
     | 
| 
       31 
38 
     | 
    
         
             
                  ].join(' ')
         
     | 
| 
       32 
39 
     | 
    
         | 
| 
         @@ -40,7 +47,7 @@ module Sigh 
     | 
|
| 
       40 
47 
     | 
    
         
             
                    ptn = 'Assuming Distribution Identity'
         
     | 
| 
       41 
48 
     | 
    
         
             
                  end
         
     | 
| 
       42 
49 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                  if output.include?(ptn)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  if output.include?(ptn) && $?.to_i == 0
         
     | 
| 
       44 
51 
     | 
    
         
             
                    Helper.log.info "Successfully signed #{ipa}!".green
         
     | 
| 
       45 
52 
     | 
    
         
             
                    true
         
     | 
| 
       46 
53 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -52,9 +59,9 @@ module Sigh 
     | 
|
| 
       52 
59 
     | 
    
         
             
                def get_inputs(options, args)
         
     | 
| 
       53 
60 
     | 
    
         
             
                  ipa = args.first || find_ipa || ask('Path to ipa file: ')
         
     | 
| 
       54 
61 
     | 
    
         
             
                  signing_identity = options.signing_identity || ask_for_signing_identity
         
     | 
| 
       55 
     | 
    
         
            -
                   
     | 
| 
      
 62 
     | 
    
         
            +
                  provisioning_profiles = options.provisioning_profile || find_provisioning_profile || ask('Path to provisioning file: ')
         
     | 
| 
       56 
63 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                  return ipa, signing_identity,  
     | 
| 
      
 64 
     | 
    
         
            +
                  return ipa, signing_identity, provisioning_profiles
         
     | 
| 
       58 
65 
     | 
    
         
             
                end
         
     | 
| 
       59 
66 
     | 
    
         | 
| 
       60 
67 
     | 
    
         
             
                def find_resign_path
         
     | 
| 
         @@ -78,10 +85,10 @@ module Sigh 
     | 
|
| 
       78 
85 
     | 
    
         
             
                  signing_identity
         
     | 
| 
       79 
86 
     | 
    
         
             
                end
         
     | 
| 
       80 
87 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                def validate_params(resign_path, ipa,  
     | 
| 
      
 88 
     | 
    
         
            +
                def validate_params(resign_path, ipa, provisioning_profiles)
         
     | 
| 
       82 
89 
     | 
    
         
             
                  validate_resign_path(resign_path)
         
     | 
| 
       83 
90 
     | 
    
         
             
                  validate_ipa_file(ipa)
         
     | 
| 
       84 
     | 
    
         
            -
                  validate_provisioning_file( 
     | 
| 
      
 91 
     | 
    
         
            +
                  provisioning_profiles.each { |fst, snd| validate_provisioning_file(snd || fst) }
         
     | 
| 
       85 
92 
     | 
    
         
             
                end
         
     | 
| 
       86 
93 
     | 
    
         | 
| 
       87 
94 
     | 
    
         
             
                def validate_resign_path(resign_path)
         
     | 
    
        data/lib/sigh/runner.rb
    CHANGED
    
    | 
         @@ -28,7 +28,7 @@ module Sigh 
     | 
|
| 
       28 
28 
     | 
    
         
             
                        Helper.log.info "Updating the provisioning profile".yellow
         
     | 
| 
       29 
29 
     | 
    
         
             
                      else
         
     | 
| 
       30 
30 
     | 
    
         
             
                        Helper.log.info "Updating the profile to include all devices".yellow
         
     | 
| 
       31 
     | 
    
         
            -
                        profile.devices = Spaceship.device. 
     | 
| 
      
 31 
     | 
    
         
            +
                        profile.devices = Spaceship.device.all_for_profile_type(profile.type)
         
     | 
| 
       32 
32 
     | 
    
         
             
                      end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                      profile = profile.update! # assign it, as it's a new profile
         
     | 
    
        data/lib/sigh/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sigh
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Felix Krause
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-10- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-10-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: fastlane_core
         
     | 
| 
         @@ -50,14 +50,14 @@ dependencies: 
     | 
|
| 
       50 
50 
     | 
    
         
             
                requirements:
         
     | 
| 
       51 
51 
     | 
    
         
             
                - - ">="
         
     | 
| 
       52 
52 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       53 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 53 
     | 
    
         
            +
                    version: 0.12.3
         
     | 
| 
       54 
54 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       55 
55 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       56 
56 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       57 
57 
     | 
    
         
             
                requirements:
         
     | 
| 
       58 
58 
     | 
    
         
             
                - - ">="
         
     | 
| 
       59 
59 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       60 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 60 
     | 
    
         
            +
                    version: 0.12.3
         
     | 
| 
       61 
61 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       62 
62 
     | 
    
         
             
              name: bundler
         
     | 
| 
       63 
63 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       226 
226 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       227 
227 
     | 
    
         
             
            requirements: []
         
     | 
| 
       228 
228 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       229 
     | 
    
         
            -
            rubygems_version: 2.4. 
     | 
| 
      
 229 
     | 
    
         
            +
            rubygems_version: 2.4.8
         
     | 
| 
       230 
230 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       231 
231 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       232 
232 
     | 
    
         
             
            summary: Because you would rather spend your time building stuff than fighting provisioning
         
     |