【问题标题】:How to create app file with fastlane for simulator如何使用 fastlane 为模拟器创建应用程序文件
【发布时间】:2017-06-18 06:20:24
【问题描述】:

我需要使用 fastlane .app 文件(或 .ipa 文件,如果适用)创建,然后我可以将其拖放到另一台计算机上的模拟器中。我试过用gym或xcodebuild参数来做,但我不知道怎么做。

现在我是这样做的:

  • 在 XCode 中我为模拟器构建应用程序

  • 接下来我在 DerivedData (~/Library/Developer/XCode/DerivedData/Build/Products/Debug-iphonesimulator/) 中搜索应用文件

  • 我将此文件复制到其他地方

但我需要使用 fastlane。

【问题讨论】:

  • 为什么需要它?您不能简单地在另一台计算机上构建应用程序吗?
  • 不。客户住在其他国家,我也不能给他源代码。我分享他的模拟器应用程序文件,他在模拟器上测试,然后我将应用程序发送到应用商店。它工作得很好,但我需要自动化这个过程。
  • 他为什么要在模拟器上测试?他在真机上测试不是更好吗?然后你可以使用 TestFlight/Fabric/Bitrise/其他服务来实现这一点。
  • 因为他想在模拟器上测试。它是我的客户,所以它是我的老板。也许他没有 iPhone,或者这只是他的幻想。事实上……这不关我的事。 :)
  • 有人回答这个问题,所以我可以奖励赏金!

标签: ios xcode fastlane


【解决方案1】:

这是我使用的车道:

lane :generate_test_app do
    xcbuild(
        workspace: "MyApp.xcworkspace",
        scheme: "MyApp",
        configuration: "Debug",
        xcargs: "-sdk iphonesimulator SYMROOT='/var/tmp/'"
    )
end

它将把应用程序留在/var/tmp/Debug-iphonesimulator/MyApp.app

另请参阅:How do I build my projects from the command line?

【讨论】:

    【解决方案2】:

    正如您在issues at fastline repo 中找到的那样,您可以使用gym 做到这一点,但也许使用xcodebuild 会更好(示例):

    xcodebuild -configuration Debug -target targetname -arch i386 -sdk iphonesimulator10.3
    

    而不是搜索~/Library/Developer/Xcode/Archives/<date>(或您使用-archivePath 指定的位置),内部将是xcarchive

    1. 在查找器中导航到您的 .xcarchive 文件
    2. 右键单击 .xcarchive 文件并选择“显示包 弹出菜单中的“内容”
    3. finder 将切换到显示 .xcarchive 的内容 文件。
    4. 导航到产品/应用程序
    5. 您的 .app 将位于产品/应用程序中

    来自here


    Here is answer,对你有帮助。


    更新: 如果您需要从命令行获取应用程序文件,您可以执行以下操作:

    mv /YourXCArchiveLocation/archive.xcarchive/Products/Applications/AppName.app /YourDesiredLocation/AppName.app
    

    【讨论】:

    • 与XCode构建应用类似。我想将构建应用程序文件添加到 fastlane 脚本。我也试过在健身房做,但我遇到了问题:github.com/fastlane/fastlane/issues/8081。我不知道如何使用健身房。
    • @PiotrWasilewicz fastline 使用 Ruby,因此请尝试实现 execsystem 以运行 xcodebuild
    • 这不是那么容易(我不知道 Ruby),但也许你是对的......使用 -archivePath 我可以指定任何路径(在 ~/Library 之外)?
    • 我添加了 -archivePath 以及应创建应用文件的路径,但它仍然构建在 ~/Library 文件夹中。
    • @PiotrWasilewicz 你确定,你做得对吗? stackoverflow.com/questions/8722633/…
    【解决方案3】:

    我已经设法用 build_app 做到了:

    build_app(
            scheme: scheme,
            workspace: workspace,
            configuration: build_configuration,
            derived_data_path: output_path,
            skip_package_ipa: true,
            skip_archive: true,
            destination: "generic/platform=iOS Simulator"
        )
    

    如果您想使用健身房,我认为您可以以此为基础。

    【讨论】:

    • 非常感谢!帮助我解决了加载缺失资产的问题!
    【解决方案4】:

    我们通过以下gym 调用实现了这一点:

    archive_path = gym(
        skip_package_ipa: true,
        destination: "platform=iOS Simulator,name=iPhone 6",
        configuration: "Debug",
        build_path: "simulator_build"
      )
    

    这将在“simulator_build/”目录中生成一个 .xcarchive,其中包含一个与模拟器兼容的 .app 文件。

    archive_path 将是创建的 .xcarchive 包的绝对路径。

    name= 需要与xcrun simctl list 的输出中显示的现有模拟器设备的名称相匹配。 iPhone 6 默认存在,所以它应该是一个安全的选择。

    在将此文件拖到模拟器进行安装之前,您需要使用 Gatekeeper 将其列入白名单:

    spctl --add ~/project/simulator_build/Products/Applications/YourApp.app
    

    如果您忘记了,您会看到“……无法打开,因为它来自身份不明的开发者。”在模拟器中点击应用时出错。

    如果您收到“...已损坏且无法打开。您应该将其移至废纸篓。”,说明 .app 自代码签名以来发生了一些变化。使用

    codesign -vvv ~/project/simulator_build/Products/Applications/YourApp.app
    

    查看自协同设计以来添加、删除或更改了哪些文件。

    【讨论】:

    • 太棒了!我只会从@tomasz-wronka 答案中添加一块,通用设备可以指定为destination: "generic/platform=iOS Simulator"
    • 这对我有用,但它正在调用 Metro 服务器。有没有办法将它与离线捆绑包一起使用?使用 react-native bundle 命令没有解决。
    【解决方案5】:

    棘手的部分是找到 .app 目录。这是我使用的:

    Dir.mktmpdir do |dir|
      xcbuild(
        workspace: "#{project_name}.xcworkspace",
        scheme: "#{project_name}",
        configuration: "Debug",
        xcargs: "-sdk iphonesimulator SYMROOT=#{dir}"
      )
      app_path = sh("find #{dir} -name *.app -type d").strip()
      sh("mv #{app_path} #{options[:output_directory]}/#{app_identifier}.app")
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多