Xcode의 빌드 구성에 따라 조건부로 파일을 포함하려면 어떻게해야합니까?
Ad-hoc 및 디버그 구성에서 빌드 된 앱에 대한 설정 번들을 포함하고 싶은 대상이 많은 Xcode 프로젝트가 있지만 릴리스 구성에는 포함되지 않습니다.
빌드 단계는 구성에 대한 조건부로 만드는 것을 허용하지 않는 것 같습니다 (분명히 대상에 대한 조건부 일 수 있지만 프로젝트의 대상 수를 두 배로 늘리면 완전히 사용할 수 없게됩니다).
그러면 사용자 지정 빌드 규칙이 작성됩니다. 내 계획은 모든 대상에서 Settings.bundle을 제외하고이를 제품 패키지에 조건부로 복사하는 빌드 규칙을 만드는 것이지만 적용 가능한 예제는 찾기가 정말 어렵습니다.
내가 시작한 빌드 규칙에는 "이름이 일치하는 소스 파일 :"으로 설정된 프로세스 설정과 이름으로 Settings.bundle이 설정되어 있습니다. 사용 설정은 "사용자 지정 스크립트 :"입니다.
내 사용자 지정 스크립트는 다음과 같습니다 (내 bash 스크립트가화물 컬트 수준에 있다는 경고 포함).
if [${CONFIGURATION} = 'Debug'] then
cp -r ${INPUT_FILE_PATH} ${DERIVED_FILES_DIR}/.
fi
마지막으로 ${DERIVED_FILES_DIR}/Settings.bundle
출력 파일로 나열했습니다.
내가 여기 있기 때문에 작동하지 않는 것이 분명합니다. 내 첫 번째 질문은 1) 실제로 실행되고 있는지 2) 어딘가에 어리석은 구문 오류가 없는지 확인하기 위해 실행으로 빌드 규칙의 출력을 볼 수있는 어딘가에 있는지 여부입니다.
또한 출력을 복사 할 적절한 위치 (환경 변수 형식)는 무엇입니까?
나는 마침내 그것을 알아 냈습니다.
설정 번들을 조건부로 포함하려는 각 대상에 대해 소스 목록에서 해당 프로젝트를 선택하고 대상을 선택한 다음 "Build Phases"탭으로 전환합니다.
"Add Build Phase"버튼을 클릭하고 "Add Run Script"를 선택합니다.
그런 다음 스크립트에 다음을 입력하십시오.
if [ "${CONFIGURATION}" == "Debug" ]; then
cp -r "${PROJECT_DIR}/Settings.bundle" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
fi
이 질문에 대한 답변이 이미 있다는 것을 알고 있으며 그 답변은 저에게 매우 도움이되었지만 저만의 수정 된 솔루션도 거기에 던지고 싶었습니다.
내 요구 사항은 릴리스에 포함하지 않는 것이 아니라 다른 빌드 구성에 대해 다른 설정 번들을 갖는 것이 었습니다. 디버그 및 릴리스 구성 만 단순한 접근 방식이라고 가정하면 다음 과 같은 방법을 사용할 수 있습니다.
프로젝트에이 개 설정 번들을 추가라는 이름으로 시작 Settings-debug.bundle
하고 Settings-release.bundle
다음에서 이러한 파일을 제거 복사 번들 리소스 빌드 단계. 다음 SETTINGS_BUNDLE
으로 각 구성에 대해 서로 다른 값을 가진 사용자 정의 빌드 설정을 추가 합니다.
Debug ${PROJECT_DIR}/relative/path/to/Settings-debug.bundle
Release ${PROJECT_DIR}/relative/path/to/Settings-release.bundle
다음 으로 Frank의 솔루션에서 수정 된 버전의 스크립트와 함께 Copy Settings Bundle 이라는 실행 스크립트 빌드 단계 ( Copy Bundle Resources 이후)를 추가합니다 .
cp -r "${SETTINGS_BUNDLE}/" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.bundle"
여기서 차이점은 복사 된 번들의 이름은 소스 이름에 관계없이 항상 Settings.bundle 이라는 것입니다.
그런 다음 설정 번들에만 변경 사항이있을 때 코드 서명 오류를 방지하기 위해 다른 빌드 단계 스크립트를 추가해야합니다. 모든 빌드에서 코드 서명 단계가 발생하도록합니다. 이것은 실행해야합니다 전에 컴파일 소스 파일 빌드 단계. 저는 Force Codesign 이라고 불렀습니다 .
touch "${PROJECT_DIR}/relative/path/to/main.m"
준수 된 소스의 경우 문서화가 잘되지 않은 사용자 정의 빌드 설정을 추가 할 수 있습니다. 파일을 컴파일에서 제외하고 포함 할 수 있습니다.
대상의 빌드 설정으로 이동> + 버튼 탭> 사용자 정의 설정 추가
키는 INCLUDED_SOURCE_FILE_NAMES
또는EXCLUDED_SOURCE_FILE_NAMES
값은 공백으로 구분 된 파일 경로 목록입니다.
참조 : http://lists.apple.com/archives/xcode-users/2009/Jun/msg00153.html
Settings.bundle은 릴리스 또는 디버그 구성에 관계없이 항상 대상 영역에 복사됩니다. 따라서 다음 코드가 필요할 수 있습니다.
if [ ${CONFIGURATION} == "Release" ]; then
rm -rf ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.bundle
fi
나는 쉘 스크립트 전문가는 아니지만 대괄호와 조건 사이에 공백이 필요하다고 생각합니다. 또한 변수를 인용하면 도움이 될 수 있습니다.
if [ "${CONFIGURATION}" = "Debug" ] then
cp -r "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}"/.
fi
위치 "$BUILT_PRODUCTS_DIR"/"$FULL_PRODUCT_NAME"
는 OS X 앱 번들의 루트로 사용 합니다.
( Xcode 9.3으로 테스트 됨 )
Xcode에이 기능이 포함 된시기를 찾을 수 없지만 EXCLUDED_SOURCE_FILE_NAMES
이제 Build Settings > Build Options > Excluded Source File Names
.
따라서 더 이상 User-Defined Setting
.
'developer tip' 카테고리의 다른 글
JLabel의 여러 줄 텍스트 (0) | 2020.10.27 |
---|---|
jQuery 찾기 및 문자열 바꾸기 (0) | 2020.10.26 |
tmux에서 Cb의 키 바인딩을 ca로 설정하면 커서를 줄의 시작 부분으로 이동하려면 어떻게해야합니까? (0) | 2020.10.26 |
EntityManager가 닫힙니다. (0) | 2020.10.26 |
IB Designables : 자동 레이아웃 상태 업데이트 실패 : 경로에서 Designables를로드하지 못했습니다 (null). (0) | 2020.10.26 |