我想将文件复制到模拟器将使用的路径。我在谈论模拟器运行时看起来像这样的路径
/Users/myUser/Library/Developer/CoreSimulator/Devices/A9A30146-764F-4A4B-BAA2-00D5808D77C2/data/Containers/Data/Application/B85F7B67-FD50-48AA-8E03-2F806858AF71
有没有办法在构建时获取该路径,以便我可以使用Run Script构建阶段在那里复制文件?
目前我的应用每次新安装应用时都会从网络中获取大量资源。该应用程序检查本地文件存储的内容,如果文件丢失或过期,它将同步它们。
为了加快开发反馈周期,我希望将这些资源从我的开发机器上的本地目录复制到构建步骤或其他任何有意义的时间,复制到模拟器的本地存储中的正确目的地。这样,当我准备将应用程序投入生产时,我可以有一个快速的开发周期,只需要删除构建脚本或其他任何机制。
答案 0 :(得分:0)
这可以作为TARGET_BUILD_DIR
环境变量用于运行脚本构建阶段。将这些文件复制到的合理位置可能是$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH
。这是CocoaPods从Pods安装资源的方式,请参阅https://github.com/CocoaPods/CocoaPods/blob/master/lib/cocoapods/generator/copy_resources_script.rb
但是,不清楚为什么要在Run Script阶段执行此操作。对于许多用途,您可能只想使用现有的Copy Bundle Resources构建阶段。
我认为您无法在构建时访问您正在寻找的路径,因为应用程序是在安装之前构建的,并且在构建应用程序时甚至可能尚未确定安装路径。
要为您的缓存或您想要进行本地开发的任何内容加热,我会看到一些选项:
在您的应用包中包含这些资源,然后在启动时将它们复制到相应的目标目录。如果您希望在应用程序中包含这些资源的某些默认版本,然后可以在应用程序启动时根据需要进行更新,那么这应该是可靠的,并且可能是您希望在发布版本中使用的内容。这种方法还会增加应用程序包的大小,如果在发布版本中不需要它,那么在这些环境中删除或禁用它们可能会更多。
在构建时嵌入对应用程序中开发文件位置的引用(例如,相对于SRCROOT
的路径)。启动应用程序时,根据需要将这些文件复制到位。这只能在模拟器中工作,并依赖模拟器不强制执行沙箱控件(允许您的应用程序读取模拟器外的目录)。
像往常一样从服务器下载这些文件,但在本地托管这些文件,这样您的开发版本就可以快速从某个localhost
地址获取它们。
我尝试使用选项3来大致密切复制应用的发布行为,但使用最适合您工作流程的任何内容。
答案 1 :(得分:0)
您可以将以下命令复制并粘贴到Run Script build phase
cp -r "Your Resource Path" "`xcrun simctl get_app_container booted ${PRODUCT_BUNDLE_IDENTIFIER}`"
xcrun simctl get_app_container booted ${PRODUCT_BUNDLE_IDENTIFIER}
->这将采用当前启动的产品路径,您甚至可以从终端进行检查,例如:
xcrun simctl get_app_container booted com.your.packagename