在Xcode创建应用程序二进制文件后,删除框架和框架链接
我想在Xcode中构建同一应用程序的两个版本,一个有,一个没有Sparkle框架。我不想维持一个单独的目标。相反,我想使用两个独立的方案,它们依赖于两个独立的构建配置(好吧,总共4个,因为我将使用一个用于调试构建,一个用于发布构建) 问题是“复制捆绑资源”和“构建阶段”中的“链接二进制”步骤对于给定目标上的所有方案都是相同的,据我所知 因此,在我看来,我唯一的选择是在构建之后(以及在签名之前)运行一个脚本,该脚本将:在Xcode创建应用程序二进制文件后,删除框架和框架链接,xcode,otool,Xcode,Otool,我想在Xcode中构建同一应用程序的两个版本,一个有,一个没有Sparkle框架。我不想维持一个单独的目标。相反,我想使用两个独立的方案,它们依赖于两个独立的构建配置(好吧,总共4个,因为我将使用一个用于调试构建,一个用于发布构建) 问题是“复制捆绑资源”和“构建阶段”中的“链接二进制”步骤对于给定目标上的所有方案都是相同的,据我所知 因此,在我看来,我唯一的选择是在构建之后(以及在签名之前)运行一个脚本,该脚本将: 从应用程序包中删除框架 取消框架与可执行文件的链接(见ottol-L) 有什么
ottol-L
)有什么建议吗?经过一番努力,我想出了一个解决办法
config = ENV['CONFIGURATION']
if (config =~ /no_sparkle/)
$stderr.puts "Removing Sparkle Framework"
sparkle_path = "#{ENV['BUILT_PRODUCTS_DIR']}/#{ENV['FRAMEWORKS_FOLDER_PATH']}/Sparkle.framework"
`rm -Rf "#{sparkle_path}"`
$stderr.puts "Removing Sparkle Framework linking"
binary_path = "#{ENV['BUILT_PRODUCTS_DIR']}/#{ENV['EXECUTABLE_PATH']}"
`install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @rpath/ "#{binary_path}"`
end
我不能做的一件事是使用
install\u name\u tool
完全删除与框架链接对应的行。我只能将其更改为“/”以删除它的任何痕迹,这样即使框架以某种方式可访问,它也不会意外加载。如果能够完全删除它就好了。对于Xcode 9,有一个更简单的解决方案,不涉及脚本。看看我原来的答案:听起来很棒!你能在这里回答我的具体问题吗?我不确定“排除源代码”将如何与框架一起工作,并阻止构建的“复制”阶段。谢谢