Xcode创建应用程序二进制文件后,删除框架和指向框架的链接

查尔斯

我想在Xcode中构建同一应用程序的2个版本,其中一个版本包含Sparkle框架,一个版本不包含Sparkle框架。我不想维护一个单独的目标。相反,我想使用2个独立的方案,这些方案依赖于2个单独的构建配置(嗯,总共4个,因为我将在调试构建中使用一种,而在发布构建中使用一种)。

问题是,据我所知,对于给定目标上的所有方案,“构建阶段”中的“复制捆绑包资源”和“链接二进制文件”步骤都是相同的。

因此,我所看到的唯一选择是在构建后(以及签名之前)运行脚本,该脚本将:

  1. 从应用程序捆绑包中删除框架。
  2. 取消框架与可执行文件的链接(如所示ottol -L)。

有什么建议么?

查尔斯

经过大量的工作,我想出了一个解决方案。

  1. 首先,确保框架链接为“弱”,Xcode在“链接二进制”阶段将其称为“可选”。还要确保在代码中对Sparkle的任何使用都能处理丢失的Sparkle框架。

框架的可选链接

  1. 通过转到“配置”选项卡中“信息”下的项目设置,为Debug和Release创建单独的构建配置,例如称为“ Debug-no_sparkle”和“ Release-no_sparkle”。通过转到“方案”弹出菜单,复制常规方案,然后在该方案的各种操作中使用“ no_sparkle”配置,还可以创建相应的方案。

  2. 在目标设置的“构建”阶段中添加“运行脚本”步骤。

运行脚本阶段以删除Sparkle框架

这是我使用的Ruby脚本:

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_name_tool我只能将其更改为“ /”以删除其任何痕迹,因此,即使可以通过某种方式访问​​该框架,它也不会意外加载。能够将其完全删除会很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift Xcode无法从项目中删除嵌入式二进制文件/链接的框架和库

在我使用xcode 6.0.1上传应用程序后,“您的二进制文件未针对iPhone 5优化”

Pyinstaller生成的应用程序未链接到指定的二进制文件(chromedriver)

为什么 Rust 应用程序二进制文件是“动态链接的”?

Xcode中要提交的应用程序二进制文件在哪里?

什么时候应该在Xcode中使用“嵌入式二进制文件”而不是“链接框架”?

无法在ItunesConnect中删除应用程序二进制文件

如何为您的Java应用程序创建本机二进制文件?

将二进制链接与库VS嵌入框架

单元测试链接到二进制框架

MSBuild - 无论构建配置或框架如何,构建后捕获二进制文件?

尝试将应用程序二进制文件上传到 App Store Connect 时出现 Xcode 12 错误

我们需要公证框架(.framework),dylib和二进制文件吗?

拒绝或删除的iPhone应用程序二进制文件已获批准并发布-新的iTunes Connect问题

xcode:添加链接器标志和“使用库链接二进制文件”之间的区别

将Cocoa Utility应用程序拆分为帮助程序二进制+主应用程序二进制文件的优缺点?

动态链接二进制文件与xcode中的库

如何从源代码构建的应用程序制作二进制文件或.deb文件?

将Fortran程序与任意二进制文件链接

将ELF二进制文件与AC程序链接

什么是应用程序二进制接口(ABI)?

快照应用程序二进制目标

Xcode 8.2更新后无效的二进制文件

如何在Play商店上载拆分的应用程序二进制文件

将预编译的二进制文件捆绑到电子应用程序中

如何打包包含需要放在$ PATH中的二进制文件的应用程序?

如何获取应用程序二进制文件的路径?

应用程序提交二进制文件未显示在iTunes Connect中

如何使用SaltStack管理应用程序二进制文件?