我想在Xcode中构建同一个应用的两个版本,一个有Sparkle框架,一个没有Sparkle框架。我不想维护一个单独的目标。相反,我想使用2个独立的方案,依赖于2个独立的构建配置(好吧,总共4个,因为我将使用一个用于调试构建,一个用于发布构建)。
问题是“复制捆绑资源”和“链接二进制”步骤中的“构建阶段”是相同的所有计划在一个给定的目标,据我所知。
所以我唯一的选择是在构建之后(和签名之前)运行一个脚本,它会:
1.从应用程序包中删除框架。
1.取消框架与可执行文件的链接(如ottol -L
所示)。
有什么建议吗?
2条答案
按热度按时间6jygbczu1#
经过一番努力,我想出了一个解决办法。
1.首先,确保框架链接是“弱”的,Xcode在“链接二进制”阶段称之为“可选”。还要确保在代码中使用Sparkle处理缺少的Sparkle框架。
1.通过转到“Configuration”选项卡中“Info”下的“Project settings”,为Debug和Release创建单独的构建配置,例如称为“Debug-no_sparkle”和“Release-no_sparkle”。还可以通过转到“Schemes”弹出菜单,复制您的正常方案,然后在方案的各种操作中使用“no_sparkle”配置来创建相应的方案。
1.在目标设置的构建阶段中添加“运行脚本”步骤。
下面是我使用的Ruby脚本:
有一件事我不能做的是完全删除对应于框架链接
install_name_tool
的行。我只能将其更改为'/'以删除任何痕迹,因此如果框架可以以某种方式访问,它甚至不会意外加载。如果能够完全删除它,那就太好了。bbuxkriu2#
您可以通过
EXCLUDED_SOURCE_FILE_NAMES
键(也可以从Build Settings选项卡访问)从特定构建中删除文件/框架。与脚本相比,更喜欢这个脚本,因为它可能会导致一些启动崩溃和/或Apple关于丢失库的警告。