创建并安装命令行 iOS .app 在模拟器内启动时崩溃

Command line created and installed iOS .app crashes when booting inside the simulator

我正在进行我的一些概念验证测试,使用 xcodebuild 和 xc运行 创建一个 .app 并将其部署到我的 ios 模拟器(甚至将 .app 目录交付给我的最终客户)。

无论如何,问题是我成功地处理了从头开始创建 .app 文件(好吧,目录)所需的所有步骤,但是在执行接下来的两行之后我遇到了应用程序崩溃,尤其是第二个,一旦我尝试上传然后 运行 .app 到模拟器上:

xcrun simctl install booted $(PWD)/build/Debug-iphoneos/APP_NAME.app
xcrun simctl launch booted somebundle.id.from.me    <- CRASH

无论我尝试什么,xc运行 命令都会将此错误产生到 system.log:

Error Domain=FBSOpenApplicationErrorDomain Code=1 "(null)"

显然我的应用程序已安装到模拟器上(我已将其擦除多次以创建全新安装),它甚至可以启动(启动画面从模拟器桌面上出现的图标增长),但第一件事当我希望应用程序通过初始屏幕时,我得到的是前面提到的崩溃行错误(在 system.log 文件中)。

有人说我的模式定义面板中可能有一些幻象的空变量。我已经检查过了,事实并非如此。没有任何变量。

其他一些人说该应用程序的旧版本可能在模拟器的任务计划程序中仍然存在。事实上,有时我发现我的任务是过去的旧任务,但按两次 "home" 进入模拟器任务管理器,将其杀死,然后尝试使用 xc[=48= 重新启动我的 .app 文件] 又什么都不做,crahs还在。 我什至停止了从 Xcode 本身启动的同一个应用程序的旧执行(使用停止按钮),但运气不好。

所以,我肯定迷路了。我无法通过命令行将我最近创建的 .app 启动到模拟器上。

它在 9.3 (iPhone 4s) 模拟器和 9.3 (iPhone 6plus) 模拟器上失败了。 我的 XCode 工具是我的 XCode 7.3.1 中包含的工具。 我正在使用 "El Capitán".

我想不出别的了。

我希望能够通过 "command line tools" 上传和 运行 我的 .app。 我希望这在某种程度上是可能的,或者至少看起来我真的离成功很近了。

还有其他我可能忽略的提示吗?

问候和感谢。

又一个自答题成功的案例:)

简短版本:我正在构建一个 "real ios device" 编译版本,然后尝试将其安装到模拟器上。更改 xc运行 和 xcodebuild(体系结构和路径)参数就成功了,现在当来自模拟器的 运行 时,应用程序就像一个魅力。


长版: 问题是什么?我在调用 xcodebuild 时(错误地)选择的体系结构和路径 定义我的编译架构的参数之一是隐式声明 "ARM" (-sdk iphoneos),但模拟器 运行time 引擎使用的架构是 i386(我们在 MAC 中) . 正如预期的那样,一旦 "real-device-compiled-.app" 安装到模拟器上,模拟器本身就不知道如何启动它,然后就发生了神秘的崩溃。

是什么给了我线索? 我在其他地方发现的 2 个其他问题,在 Stack Overflow 中。在此处查找额外信息:

Apps manually installed in simulator crashes upon load

xcodebuild: simulator or device?

是什么让我查看其他 2 个线程? 我在其他地方找到的一个 .log 文件,而不是默认的和沉闷的 /var/log/system.log

咆哮:现代 MAC 上的许多 .log 文件都存在问题! /咆哮

无论如何,在发现哪个 .log 文件对我有用的过程中,我发现了这些:

  • $HOME/Library/CoreSimulator/CoreSimulator.log(对 不管怎样,我的问题)。
  • $HOME/Library/CoreSimulator/[UGLY_HASH_CORRESPONDING_TO_THE_SIMULATOR_YOU_ARE_USING]/system.log

最后一张不错。在此 .log 文件的末尾,我在尝试启动 "badly built .app" 文件时发现了其他信息。日志是这样说的:

Program specified by service does not contain one of the requested architectures

然后 "architectures" 这个词给了我解决问题的提示以及要查找的内容。


就是这样。 万一以后有人在同样的情况下发现 him/herself 我希望我上面写的所有这些信息都会有用。

你好。


PS:如果您找不到麻烦的模拟器(及其关联的 .log 文件)所在的文件夹,(实际上可以安装数十个模拟器), y̶o̶u̶ ̶c̶a̶n̶ ̶u̶s̶e̶ ̶a̶n̶ ̶A̶l̶c̶a̶t̶r̶a̶z̶ ̶p̶l̶u̶g̶i̶n̶ ̶c̶a̶l̶l̶e̶d̶ ̶X̶C̶o̶d̶e̶W̶a̶y̶.̶ ̶O̶n̶c̶e̶ ̶t̶h̶i̶s̶ ̶p̶l̶u̶g̶i̶n̶ ̶i̶s̶ ̶i̶n̶s̶t̶a̶l̶l̶e̶d̶ ̶a̶n̶d̶ ̶p̶r̶o̶p̶e̶r̶l̶y̶ ̶r̶u̶n̶n̶i̶n̶g̶,̶ ̶y̶o̶u̶ ̶c̶a̶n̶ ̶c̶h̶e̶c̶k̶ ̶t̶h̶e̶ ̶p̶a̶t̶h̶ ̶o̶f̶ ̶y̶o̶u̶r̶ ̶i̶O̶S̶8̶+̶ ̶S̶i̶m̶u̶l̶a̶t̶o̶r̶ ̶d̶o̶i̶n̶g̶ ̶t̶h̶i̶s̶ ̶f̶r̶o̶m̶ ̶X̶C̶o̶d̶e̶:̶

X̶c̶o̶d̶e̶ ̶-̶>̶ ̶W̶i̶n̶d̶o̶w̶s̶ ̶-̶>̶ ̶X̶C̶o̶d̶e̶W̶a̶y̶ ̶-̶>̶ ̶G̶o̶ ̶t̶o̶ ̶i̶O̶S̶8̶+̶ ̶S̶i̶m̶u̶l̶a̶t̶o̶r̶ ̶F̶o̶l̶d̶e̶r̶ ̶F̶i̶n̶d̶e̶r̶ ̶w̶i̶l̶l̶ ̶o̶p̶e̶n̶,̶ ̶a̶n̶d̶ ̶t̶h̶e̶r̶e̶ ̶w̶i̶l̶l̶ ̶b̶e̶ ̶y̶o̶u̶r̶ ̶.̶l̶o̶g̶ ̶f̶i̶l̶e̶ ̶:̶)̶ ̶

你可以阅读下面的评论,看看简短而正确的方法:)

xcrun simctl launch booted somebundle.id.from.me 没有崩溃。它正确地向您报告了一个错误,表明启动失败。

Error Domain=FBSOpenApplicationErrorDomain Code=1 表示启动您的应用程序时出错。是的,您可能已经知道这一点,但更具体地说,代码 1 表示一般故障,而不是我可以用来查明确切问题的东西。 1 表示 "this error is something going wrong but we don't have a better error code to use for it"

有关问题所在的更多相关信息,建议您在发布期间观看模拟器 system.log。您的问题表明您正在查看 system.log,但听起来您正在查看主机 system.log,这在这里对您没有多大用处。例如:

Terminal 1 $ tail -F ~/Library/Logs/CoreSimulator/[UDID]/system.log
Terminal 2 $ xcrun simctl launch booted somebundle.id.from.me

然后回到1号终端,报错后break。查看这些日志,寻找任何可能相关的内容。

我怀疑您的手动应用程序包格式不正确,并且设备的 system.log 中可能存在适当的详细信息。如果是这种情况,那么用您的示例提交雷达 (http://bugreport.apple.com) 将非常有帮助,这样可以适当更新错误消息以传播回用户而不是那个“(null)”。