带Extension的iOS工程多Target区分环境

有点拗口的标题,新建target用来区分不同的环境(预研的,测试的等等)网上有很多文章,这里不赘述了。今天主要是针对带有Extension的工程要新建target,又不想新建Extension来匹配新建的target,所以这里记述一下。

Stack Overflow原帖地址

由于Extension需要与宿主target的bundle id保持相同的前缀,因此带有Extension的工程的target复制以后,要使用Extension就需要新建一个,本着能少抠一个字就绝不多敲一下的原则,我们可以在scheme里添加一个脚本:

  • 打开target1的Edit Scheme页面,如图展开Build选项
    Group 4.png
  • Pre-actions里添加脚本
    Group 3.png
  • 复制脚本,注意Provide build settings from选项要选相应的target,否则编译不过
    Group 2.png
  • close结束。以上步骤只是完成其中一个target,你有几个target需要用到这个extension,哪几个target的scheme的就都要重复一遍这几步。脚本里写的很清楚里,编译不同的target就会把这个extension的Info.plistBundle Id改成对应前缀。

看一下脚本:

#!/bin/bash
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="your extension's name"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
  1. 脚本里的extId要跟你的extension的bundleid里的名字后缀符合,比如我的extension叫com.broway.app.ShareExtensionService,那么这个extId就是ShareExtensionService
  2. 后面${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那栏里也添加这个脚本,目前还没试过上传,后面遇到了我会来改。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。