我有一个运行脚本,通过$ SRCROOT获取当前项目路径的值.我将此路径作为参数传递给脚本中的应用程序.问题是,如果我的项目名称有空格,$ SRCROOT不会评估完整,正确的路径.它在第一个空格后截断.
是否有可能在Xcode的这个运行脚本构建阶段中转义$ SRCROOT?
我正在寻求有关如何在项目中的 4 个目标之间共享资产的建议:A.app、B.app、C.app、D.app
在“运行脚本”阶段,将文件从 Assets.bundle 复制到 *.app 目标中,如下所示:
cd "${BUILT_PRODUCTS_DIR}" ls Assets.bundle | sed '/Info.plist/d' | sed '/Info.plist/d' | xargs -t -I {} cp -r Assets.bundle/{} "${CONTENTS_FOLDER_PATH}/"
但是,当我运行该应用程序时,用户界面看起来不正确。.xib 已加载,但未加载任何图像!图像文件和 nib 文件似乎已正确复制到 .app 文件夹中。我的假设是,编译后的 .nib 文件假定它位于 Assets.bundle 文件夹内,从而解释了为什么它在位于 Assets.bundle 文件夹外时不起作用。
我在这种方法中遗漏了什么吗?
创建一个由 {A,B,C,D}.app 目标#imported 的 Assets.xcconfig 文件。
将“复制捆绑资源”从 A.app 目标镜像到 {B,C,D}.app 目标
使用 ruby 脚本,我可以更新“project.pbxproj”文件。
在 {A,B,C,D}.app 目标上手动维护“复制捆绑资源”。
编辑:我想放弃这种“目标会员”方法,因为这是一个大项目,很多人都在贡献。
我在使用django-extensions中包含的runscript命令运行脚本文件夹内的文件夹中的脚本时遇到问题。
我的项目中的文件夹结构如下:
-apps
-scripts
-syllabus
-first.py
-second.py
Run Code Online (Sandbox Code Playgroud)
文件first.py和second.py相同。
它具有django-extension runscript命令所需的运行功能。
def run(*args):
# my function call for the script.
Run Code Online (Sandbox Code Playgroud)
我已经很好地放置了init .py,并且可以从命令中运行second.py:
./manage.py runscript second --script-args=excel.xlsx
但是以某种方式我无法从runscript命令运行first.py文件。使用此命令:
./manage.py runscript first --script-args=excel.xlsx
我懂了
No (valid) module for script 'first' found
Try running with a higher verbosity level like: -v2 or -v3
我什至尝试在添加-v2和-v3结束时使用更高的详细级别。但是得到了这个错误:
No (valid) module for script 'first' found
我知道我缺少一些简单的东西,有人可以帮我吗?
我需要设置我的Simulators for Automated UITesting.特别是从键盘上删除Autocorrection,Spellchecking,Prediction等.
我正在为一个模拟器这样做:
plutil -replace KeyboardAutocapitalization -bool NO -- ~/Library/Developer/CoreSimulator/Devices/319FF855-F54C-4BB7-BDED-F0CC4B1FF8FC/data/Library/Preferences/com.apple.Preferences.plist
Run Code Online (Sandbox Code Playgroud)
问题是,当测试在另一台设备上运行时,它将不会设置模拟器,因为UUID是硬编码的.
我也能够像这样启动/选择模拟器:
currentUUID="$(xcrun simctl list devices | grep "iPhone 7 (" | egrep -o -i "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")"
Run Code Online (Sandbox Code Playgroud)
我必须放在哪里iPhone 7 (才能获得UUIDiPhone 7而不是7+.这也只有在我之前在Xcode中选择iPhone 7作为模拟器时才有效.另一种方法是更换iPhone 7 (with booted.
但为了使其工作,脚本需要模拟器已经运行.当它已经运行时,更改plist文件实际上不会更新模拟器上的设置.
我怎样才能启动模拟器,然后在设置之前抓住它的UUID?
谢谢.
我在我的应用中启用了 Firebase Analytics 和 Crashlytics。根据Firebase 网站,我在运行脚本中的 Xcode 构建阶段下实现了以下内容:
find dSYM_directory -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p platform \{\}
Run Code Online (Sandbox Code Playgroud)
我从 Xcode 收到以下输出:
Running upload-symbols in Build Phase mode
Validating build environment for Crashlytics...
Validation succeeded. Exiting because upload-symbols was run in validation mode
Run Code Online (Sandbox Code Playgroud)
据称该脚本成功完成了其工作,如 中所述Console.app。请参阅附加的屏幕截图以获取输出。

在 Xcode 中收到上述消息后,构建进度不会再进一步。它卡在Building 2069 of 2081 tasks。在分发了新的应用程序版本后,我可以手动成功运行此脚本。但是谷歌为 Firebase 提供这个脚本的重点是自动化整个过程。
有没有人在他们的运行脚本中成功实现上传符号脚本?任何想法为什么我的 Build 停滞不前并且永远不会完成?