Ios 如何使用fastlane为模拟器创建应用程序文件
我需要用fastlane.app文件(或.ipa文件,如果可以的话)创建,然后将其拖放到另一台计算机上的模拟器上。我试着用gym或xcodebuild参数来做,但我不知道怎么做 现在我是这样做的:Ios 如何使用fastlane为模拟器创建应用程序文件,ios,xcode,fastlane,Ios,Xcode,Fastlane,我需要用fastlane.app文件(或.ipa文件,如果可以的话)创建,然后将其拖放到另一台计算机上的模拟器上。我试着用gym或xcodebuild参数来做,但我不知道怎么做 现在我是这样做的: 在XCode中,我为模拟器构建应用程序 接下来,我在DerivedData(~/Library/Developer/XCode/DerivedData/Build/Products/Debug iphonesimulator/)中搜索应用程序文件 我把这个文件复制到别的地方 但是我需要用fastl
- 在XCode中,我为模拟器构建应用程序
- 接下来,我在DerivedData(~/Library/Developer/XCode/DerivedData/Build/Products/Debug iphonesimulator/)中搜索应用程序文件
- 我把这个文件复制到别的地方
xcodebuild
(示例):
然后搜索~/Library/Developer/Xcode/Archives/
(或者使用-archivePath
指定的位置),其中将是xccarchive
,那会对你有帮助的
更新: 如果需要从命令行获取应用程序文件,可以执行以下操作:
mv /YourXCArchiveLocation/archive.xcarchive/Products/Applications/AppName.app /YourDesiredLocation/AppName.app
这是我使用的车道:
lane :generate_test_app do
xcbuild(
workspace: "MyApp.xcworkspace",
scheme: "MyApp",
configuration: "Debug",
xcargs: "-sdk iphonesimulator SYMROOT='/var/tmp/'"
)
end
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
它会将应用程序保留在/var/tmp/Debug iphonesimulator/MyApp.app
另请参见:我已通过build\u应用程序实现了这一点:
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"
)
如果你想使用gym,我想你可以基于此。棘手的部分是找到.app目录。以下是我使用的:
lane :generate_test_app do
xcbuild(
workspace: "MyApp.xcworkspace",
scheme: "MyApp",
configuration: "Debug",
xcargs: "-sdk iphonesimulator SYMROOT='/var/tmp/'"
)
end
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
我们通过以下
gym
调用实现了这一点:
archive\u path=gym(
跳过包\u ipa:正确,
目的地:“平台=iOS模拟器,名称=iPhone 6”,
配置:“调试”,
构建路径:“模拟器构建”
)
这将在目录“simulator_build/”中生成一个.xcshive,其中包含一个与模拟器兼容的.app文件
archive\u path
将是创建的.xarchive捆绑包的绝对路径
name=
需要匹配xcrun simctl list
输出中显示的现有模拟器设备的名称。默认情况下,iphone6
one是存在的,因此它应该是一个安全的选项
在将此文件拖动到模拟器以安装它之前,您需要将其与Gatekeeper一起列入白名单:
spctl --add ~/project/simulator_build/Products/Applications/YourApp.app
如果您忘记了,在模拟器中单击应用程序时会出现“…无法打开,因为它来自身份不明的开发人员”错误
如果您得到“…已损坏且无法打开。您应该将其移到垃圾箱中。”,则自.app进行代码签名以来,该应用程序发生了一些变化。使用
codesign -vvv ~/project/simulator_build/Products/Applications/YourApp.app
查看自代码签名以来添加、删除或更改了哪些文件。为什么需要它?你不能在另一台计算机上简单地构建应用程序吗?不。客户住在其他国家,我也不能给他源代码。我为他共享模拟器的应用程序文件,他在模拟器上测试,然后我将应用程序发送到应用程序商店。它工作得很好,但我需要自动化这个过程。为什么他要在模拟器上测试?对他来说,在真正的设备上测试不是更好吗?然后你可以使用TestFlight/Fabric/Bitrise/其他服务来实现这一点,因为他想要在模拟器上进行测试。是我的客户,所以是我的老板。也许他没有iPhone,也许这只是他的幻想。事实上这不关我的事有人回答这个问题,这样我就可以奖励赏金了!它类似于使用XCode构建应用程序。我想将建筑应用程序文件添加到fastlane脚本。我也试着去健身房,但我遇到了问题:。我不知道如何使用gym。@PiotrWasilewicz fastline使用Ruby,所以尝试实现
exec
或system
来运行xcodebuild。这并不容易(我不知道Ruby),但也许你是对的。。。使用-archivePath,我可以指定任何路径(在~/Library之外)?我添加了-archivePath,其中包含应该创建应用程序文件的路径,但它仍然在~/Library文件夹中生成。@PiotrWasilewicz您确定这样做是对的吗?明亮的我只想添加@tomasz wronka answer中的一部分,该通用设备可以指定为destination:“generic/platform=iOS Simulator”
这对我来说是可行的,但它正在调用Metro服务器。有没有办法让它与离线捆绑一起使用?使用react native bundle命令无法解决此问题。非常感谢!帮助我解决了装载丢失资产的问题!