xcodebuild different provisioning profile for target dependency

▼魔方 西西 提交于 2019-11-26 08:12:58

问题


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

xcodebuild -workspace \"RG.xcworkspace\" -scheme \"Production\" -configuration \"Release\" build CONFIGURATION_BUILD_DIR=\"${TEMP_DIR}\" PROVISIONING_PROFILE=\"1234-5678-9098-7654-3210\"

My scheme has two targets. One target is the app, the other is the app extension (I built an extension for Safari). The app extension is a target dependency. Each target requires a separate provisioning profile. I don\'t know how to specify the PROVISIONING_PROFILE for the dependency. I\'m getting this error, as expected:

CodeSign error: code signing is required for product type \'App Extension\' in SDK \'iOS 8.1\'

StackOverflow and the man page for xcodebuild don\'t seem to come up with anything. Does anyone know how to build a project with xcodebuild that relies on two provisioning profiles?


回答1:


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

This will result in something like the following:

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 :)




回答2:


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




回答3:


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.




回答4:


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.



来源:https://stackoverflow.com/questions/27973011/xcodebuild-different-provisioning-profile-for-target-dependency

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!