其他可参考:猿题库iOS客户端的技术细节(一):使用多target来构建大量相似App
问题:当两个app差异很小,差不多70%都是相同的模块,只是个别模块有些差异时,
①错误做法:如果你最开始为了简单,分别创建了两个项目,后来新开发的功能两个端也要同时支持,这时候你就会发现频繁的在两个项目中切换,复用相同的模块很麻烦。而且有时候还不能保证就一定复用到了最新的代码。那么这种问题怎么解决呢?
②正确做法:让两个app端保持在一个项目中,但创建多个target使其生成不同的app端。
问题1:那么此时多个Target的podfile文件配置又该怎么写了
附:http://guides.cocoapods.org/using/the-podfile.html
If you want multiple targets to share the same pods, use an abstract_target.
# There are no targets called "Shows" in any Xcode projects
abstract_target 'Shows' do
pod 'ShowsKit'
pod 'Fabric'
# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
# Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
pod 'ShowTVAuth'
end
end
其会工程中的在Pods文件下生成多个以Shows为前缀的.xcongfig文件。
问题2:在代码中我们势必会通过某个宏如APPTYPE来区分当前代码的处理逻辑是什么?那么此时这个宏的定义我们还能像之前只有一个target的时候那样,写在具体的.h或者.m文件里面吗?
答:
①可以,但麻烦。因为每次你打包不同的target的时候,都得记得要修改当前代码中设置的宏的值。
②更好的做法是,我们直接将这个宏写在每个target里面。这样我们每次打包不同的target的时候,就不必还得去麻烦的设置了。改设置的位置在Target--Build Setting--Preprocessor Macros里面。在这里我们也可以看到我们常见的DEBUG宏。
多个target容易因为不注意,而出现的问题
1、修改项目目录结构的时候,文件没有引入对应target,而造成编译问题。对于类目文件文件,这种问题,很容易被忽略,而导致编译通过,运行却崩溃。
2、一些目录改变,却没有在项目中删除,并重新引入的,如之前遇到的info.plist文件,导致审核的时候,提示
- 1.1 Legal: Privacy - Data Collection and Storage
Guideline 5.1.1 - Legal - Privacy - Data Collection and StorageWe noticed that your app requests the user’s consent to access the location but does not clarify the use of this feature in the permission modal alert.
Please see attached screenshots for details.
Next Steps
To resolve this issue, please revise the permission modal alert to specify why the app is requesting access to the location.
Resources
To learn more about requesting the user’s permission to access app features, visit the iOS Human Interface Guidelines. You may also want to review the Technical Q&A QA1937: Resolving the Privacy-Sensitive Data App Rejection page for details on how to provide a usage description for permission request alerts.
结束!