xcodebuild different provisioning profile for target dependency

后端 未结 4 1808
醉话见心
醉话见心 2020-11-27 16:19

I\'m trying to build my app with xcodebuild:

xcodebuild -workspace \"RG.xcworkspace\" -scheme \"Production\" -configuration \"Release\" build CONFIGURATION_B         


        
相关标签:
4条回答
  • 2020-11-27 16:44

    I spent far too long working on this today. I was on my way to bed when the answer hit me:

    In each of your targets's Build Settings you should set a $VARIABLE for the profile name. To do this, selected "Other" from the bottom of the list of profiles. Doing this will open a text field - choose a different $VARIABLE for each target - for example I chose $APP_PROFILE for the container app target and $EXTENSION_PROFILE for my Today extension target

    Adding a build variable variable...

    This will result in something like the following:

    Profiles

    Finally, when building with xcodebuild, specify the profile UUIDs as you did with PROVISIONING_PROFILE:

    xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"
    

    Building from within XCode seems to be unaffected - as far as I could tell XCode is selecting the default profiles (as if in "Automatic" mode)

    Theoretically this would support multiple extensions too.

    Works for me with XCode 6.3 :)

    0 讨论(0)
  • 2020-11-27 16:44

    Solution Without Variable

    There is an option, -exportSigningIdentity which can help you, because provisioning profiles of Application & Extension/Widget may be different, but signing identities of app & extension are supposed to be same.

    For example, you will see that,

    • TargetApp -> Build Settings -> "Code Signing Identity (id)" (Release)
    • TargetExtension -> Build Settings -> "Code Signing Identity (id)" (Release)

    are essentially same string, lets say this identity is "Code Signing Identity (id)". So to build & export archive, what you can run, are simply,

    Cleaning

    xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

    Building

    xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive

    Exporting

    xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"

    Reference: xcodebuild documentation

    0 讨论(0)
  • 2020-11-27 16:46

    Months later... Found a solution that doesn't involve settings values within Xcode: Within sigh there is a script that is capable of resigning an ipa file with given profiles. The following works for me:

    bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose
    

    where:

    • Experiments-AdHocProd.ipa is the existing ipa
    • com.company.experiments.AudioPlugin is the extension bundle ID
    • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision is the extension profile
    • com.company.experiments is the main app bundle identifier
    • Experiments-AdHocProd.mobileprovision is the main app profile

    Each profile's bundle identifier must match that of the app it will be signed with.

    Something I found that is important to note is that if a bundle identifier has a wildcard (in my case Experiments-AdHocProd.mobileprovision does) then the profiles with explicit IDs must be passed into -p first.


    Alternatively, you could use sigh to perform the resign. Unfortunately, sigh --help doesn't say anything about resigning binaries with extensions, however sigh resign --help does.

    0 讨论(0)
  • 2020-11-27 16:55

    In Swift, Pod files framework will be packaged separately. Following steps solved the problem.

     1. Select pods 
     2. Targets
     3. General
     4. Edit bundle id
     5. Build Settings
     6. Code Signing
     7. Provisioning profile -> select the valid profile
     8. Code Signing Identity -> Select the respective identity from
        profile.
    

    Repeat the same for all targets.

    I am able to generate build.

    0 讨论(0)
提交回复
热议问题