我的应用程序的当前 AppStore 版本导致数百名用户崩溃,因为找不到捆绑的框架。这在测试中没有出现,而且我一直无法重现这个问题,无论是在模拟器上还是在设备上,无论我是将设备擦干净并进行全新安装,还是在现有版本上安装。
我从用户那里得到的错误日志表明:
Dyld Message: Library not loaded: @rpath/OMGHTTPURLRQ.framework/OMGHTTPURLRQ
Referenced from: /var/containers/Bundle/Application/BB320110-3C64-4772-9A3A-208F4CAD84B5/PicTapGo.app/PicTapGo
Reason: image not found
但是,经过审查,该框架肯定包含在发送到 App Store 的实际包中,位于 Frameworks 文件夹中。在 Xcode 项目中,运行时搜索路径包括“@executable_path/Frameworks”,这是捆绑框架的地方。
这是我们第一次链接动态库(这是必须的,因为该库包含 Swift 代码),所以我可能(甚至可能)遗漏了一些关于嵌入式框架的重要信息.
同样,奇怪的是,我可以将我的 iPhone 擦干净,然后从 App Store 重新安装这个版本,并且不会出现错误。在我测试过的每个配置中(包括我们的 Beta 测试人员),库加载得很好。这意味着只有部分用户缺少该框架。此外,失败似乎没有任何韵律或原因。它发生在各种 iOS 设备上,在所有版本的 iOS 9 上(尽管我没有在 Xcode 管理器中看到任何 iOS 8 崩溃列表)。我完全无法重现该问题,但对于受影响的用户来说,它一直在发生。
知道为什么只有 一些 设备无法找到捆绑的框架吗?在某些情况下,App Store 是否会干扰您的 bundle 配置?
最佳答案
经过一些调查,这些库似乎确实 消失了。窥探发送到 App Store 的实际库二进制文件,它们最终只为 arm64 构建。仍在研究这是如何发生的(可能是一些 CocoaPods 的怪异),但这巧妙地解释了 dyld 在野外的失败。对于 arm64 架构(iPhone 5s 及更高版本),一切正常。对于 4s、5、5c 和更旧的 iPad,dyld 无法找到该库。显然,App Store strips out non-compatible architectures当他们处理应用程序时, bundle 的那部分在 armv7 设备上完全缺失。查看可用的崩溃报告,它们都不是在 arm64 设备上。
所有“找不到库”的崩溃,以及上面提到的日志,都发生在 iOS9 上。 iOS 8 上也有类似的崩溃,但消息不同。我假设它是我能够在本地复制的那个(“no suitable image found... Did find <somelib>: mach-o, but wrong architecture”),这与 iOS8 设备将获得完整的 fat 二进制文件的想法相吻合。 Lib 会在那里,但没有 arm7。
这种故障在正常开发过程中并不明显。我使用 iPhone 6 作为主要测试设备,我的测试团队显然也在使用更新的设备。我曾依靠模拟器在旧设备上进行测试。至少出于我现在可以引用的一个原因,这看起来像是一个 Bad Idea™。将来,我将在实际的 armv7 设备上进行测试,然后再将其发送到世界上。
因此,对于任何在未来遇到 dyld 故障的人来说,这是另一件需要寻找的事情。如果事实并非如此,将对此进行更新。
编辑:尸检的另一个花絮,为了后代——我们最终在 AppStore 构建中使用 arm64-only 的方式是捆绑库的调试版本,而不是 AppStore 版本。我通过创建一个新的 Copy 阶段并从 CocoaPods 的 Products 组拖拽框架来捆绑框架。但是,以这种方式配置复制阶段时获得的实际二进制文件取决于您当前处于事件状态的方案。如果您有一个激活的调试方案,您将获得库的调试版本。如果您有一个 AppStore 方案处于事件状态,您将获得一个 AppStore 构建。这是 Xcode 项目中的硬编码路径,无论您将来为主项目的构建选择哪种方案,都将捆绑您最初拖动的版本。
默认情况下,调试构建仅构建事件架构,这意味着调试库缺少 armv7 支持。
关于iOS:找不到嵌入式框架,但仅在*某些*安装中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37513448/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub