在answer provided here的基礎上,我想出了一個令人滿意的多部分解決方案。關鍵在於使用Xcode在構建過程中創建的環境變量。
首先,我對我的構建方案(粘貼到Xcode項目的UI)的存檔階段有一個後處理操作。它調用一個Python腳本我寫了(在下一節中提供),通過它的環境變量,我想拉出來的名字,路徑到一個文本文件:
# Export the archive paths to be used after Archive finishes
"${PROJECT_DIR}/Script/grab_env_vars.py" "${PROJECT_DIR}/build/archive-env.txt"
"ARCHIVE_PATH" "ARCHIVE_PRODUCTS_PATH" "ARCHIVE_DSYMS_PATH"
"INSTALL_PATH" "WRAPPER_NAME"
該腳本,然後將它們寫入在key = value
雙一個文本文件:
import sys
import os
def main(args):
if len(args) < 2:
print('No file path passed in to grab_env_vars')
return
if len(args) < 3:
print('No environment variable names passed in to grab_env_vars')
output_file = args[1]
output_path = os.path.dirname(output_file)
if not os.path.exists(output_path):
os.makedirs(output_path)
with open(output_file, 'w') as f:
for i in range(2, len(args)):
arg_name = args[i]
arg_value = os.environ[arg_name]
#print('env {}: {}'.format(arg_name, arg_value))
f.write('{} = {}\n'.format(arg_name, arg_value))
def get_archive_vars(path):
return dict((line.strip().split(' = ') for line in file(path)))
if __name__ == '__main__':
main(sys.argv)
然後,終於,在我的構建腳本(也Python)的,我分析出這些價值,並能得到到歸檔的路徑,並在其中的應用程序包:
env_vars = grab_env_vars.get_archive_vars(ENV_FILE)
archive_path = env_vars['ARCHIVE_PRODUCTS_PATH']
install_path = env_vars['INSTALL_PATH'][1:] #Chop off the leading '/' for the join below
wrapper_name = env_vars['WRAPPER_NAME']
archived_app = os.path.join(archive_path, install_path, wrapper_name)
這是我解決它的方式,它應該很容易適應其他腳本環境。這對我的約束是有意義的:我想在項目中儘可能少地使用代碼,我更喜歡使用Python腳本編寫Bash,而且這個腳本很容易在其他項目中重複使用並用於其他目的。
來源
2012-02-23 13:27:04
Dov
完美!謝謝。 – jrc 2015-02-18 20:12:13