【问题标题】:Command line created and installed iOS .app crashes when booting inside the simulator在模拟器中启动时,命令行创建和安装的 iOS .app 崩溃
【发布时间】:2016-10-23 08:05:13
【问题描述】:

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

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

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

无论我尝试什么,xcrun 命令都会在 system.log 中产生这个错误:

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

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

有人说我的架构定义面板中可能有一些幻像空变量浮动。我已经检查过了,但事实并非如此。没有任何变量。

其他人说旧版本的应用程序可能在模拟器的任务调度程序中仍然存在。确实,有时我在那里发现我的任务是过去的旧任务,但是按两次“home”进入模拟器任务管理器,将其杀死,然后尝试再次使用 xcrun 重新启动我的 .app 文件什么也没做,crahs还在那里。 我什至停止了从 Xcode 本身启动的同一个应用程序的旧执行(使用 STOP 按钮),但没有运气。

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

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

我想不出别的了。

我希望能够通过“命令行工具”上传和运行我的 .app。 我希望以某种方式有可能,或者至少看起来我真的很接近成功。

还有什么我可能忽略的提示吗?

问候和感谢。

【问题讨论】:

    标签: ios ios-simulator xcodebuild xcrun


    【解决方案1】:

    另一个成功自我回答问题的案例:)

    短版:我正在构建一个“真正的 ios 设备”编译版本,然后尝试将其安装到模拟器上。更改 xcrun 和 xcodebuild(架构和路径)参数可以解决问题,现在从模拟器运行该应用程序就像一个魅力。


    长版: 出了什么问题?我在调用 xcodebuild 时(错误地)选择的架构和路径 定义我的编译架构的参数之一是隐式声明“ARM”(-sdk iphoneos),但模拟器运行时引擎使用的架构是 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 文件的末尾,我在尝试启动“构建错误的 .app”文件时发现了其他信息。日志是这样写的:

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

    然后“架构”这个词给了我解决问题和寻找什么的提示。


    就是这样。 万一将来有人发现他/她自己处于同样的情况,我希望我上面写的所有这些信息都会有用。

    您好。


    PS:如果您找不到麻烦的模拟器(及其关联的 .log 文件)所在的文件夹,(实际上可能有几十个已安装的模拟器), 可以使用一个恶魔插件称为̶X̶C̶o̶d̶e̶W̶a̶y̶.̶一旦该插件被安装并运行正常,̶可以检查路径的你的iOS8上+̶模拟器这样做在Xcode:̶ P>

    XCODE̶-̶>̶WINDOWS̶-̶>̶̶X̶C̶o̶d̶e̶W̶a̶y̶̶-̶>̶去iOS8上+̶模拟器夹FINDER将打开,̶而且会有您的.log文件̶:̶)̶̶

    你可以阅读下面的 cmets 并查看简短而正确的方法:)

    【讨论】:

    • 或者你可以运行'xcrun simctl list'来找出UDID。
    • 或者您也可以从 Simulator.app 的菜单中打开控制台中的 system.log ...
    【解决方案2】:

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

    Error Domain=FBSOpenApplicationErrorDomain Code=1 表示启动您的应用程序时出现问题。是的,您可能已经知道,但更具体地说,代码 1 表示一般故障,而不是我可以用来确定确切问题的东西。 1 表示“此错误出问题了,但我们没有更好的错误代码可用于它”

    有关问题的更多相关信息,我建议您在发布期间查看模拟器 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 并在错误后中断。查看这些日志,找出任何可能相关的内容。

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

    【讨论】:

    • 我的回答太长了,你先发了。反正两者都是对的。也感谢整个线程的提示:)
    猜你喜欢
    • 2018-03-07
    • 2020-10-09
    • 2020-06-30
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2016-04-02
    • 2013-06-06
    • 2020-11-08
    相关资源
    最近更新 更多