有点拗口的标题,新建target用来区分不同的环境(预研的,测试的等等)网上有很多文章,这里不赘述了。今天主要是针对带有Extension的工程要新建target,又不想新建Extension来匹配新建的target,所以这里记述一下。
由于Extension需要与宿主target的bundle id
保持相同的前缀,因此带有Extension的工程的target复制以后,要使用Extension就需要新建一个,本着能少抠一个字就绝不多敲一下的原则,我们可以在scheme
里添加一个脚本:
- 打开target1的
Edit Scheme
页面,如图展开Build选项 - 在
Pre-actions
里添加脚本 - 复制脚本,注意
Provide build settings from
选项要选相应的target,否则编译不过 - close结束。以上步骤只是完成其中一个target,
你有几个target需要用到这个extension,哪几个target的scheme的就都要重复一遍这几步
。脚本里写的很清楚里,编译不同的target就会把这个extension的Info.plist
的Bundle Id
改成对应前缀。
看一下脚本:
#!/bin/bash
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="your extension's name"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
- 脚本里的
extId
要跟你的extension的bundleid里的名字后缀符合,比如我的extension叫com.broway.app.ShareExtensionService
,那么这个extId
就是ShareExtensionService
。 - 后面
${SRCROOT}/${extId}/Info.plist
是你extension文件夹里Info.plist
的路径,粘贴的时候确认一下路径是否正确。
现在跑不同的target的时候可以看到extension的Info.plist
里的id是会变的。
可能包含的问题:
Works fine to run locally. However, when I try to upload an archived version of each target to the App Store, I get an error which is similar to this one for one out of two targets. Anyone got an idea how to fix this? @Erumaru is this the same issue you experienced? Have you find a solution to fix it?
原帖里有评论说在打包的时候报错,我觉得是不是要在archive那栏里也添加这个脚本,目前还没试过上传,后面遇到了我会来改。