xcodebuild가 스키마를 포함하지 않는다고 말합니다.
저는 궁금한 점이 있습니다.
저는 XCode IDE에서 항상 작업하고 구축한 프로젝트가 있는데, 잘 작동했습니다.이제 프로젝트를 빌드하기 위해 Bamboo를 설정하고 명령줄에서 빌드하고 있습니다.
문제는 제가 GIT에서 코드를 체크아웃한 다음 xcodebuild를 사용하여 빌드하면 스키마를 찾을 수 없다고 표시되지만 프로젝트를 열면 빌드되고 동일한 명령으로 명령줄에서 다시 빌드하려고 하면 작동한다는 것입니다.
XCode는 프로젝트를 열 때 어떤 마법을 사용하고 있습니까? 아니면 제가 하면 안 되는 파일을 .gitignore에서 제외하고 멍청한 일을 하고 있습니까?
.xcscheme 파일에 관해서는 분명히 올바른 방향으로 가고 있습니다. 프로젝트를 직접 설정하는 동안 이 문제가 발생했습니다!
후손들을 위해, 혹은 적어도 검색을 통해 여기에 온 사람들을 위해, 여기 두 가지 버전의 것이 있습니다. "바쁘니까 사실만 알려주세요" 버전과 더 관련된 토론과 근거입니다.이 두 버전 모두 Workspace 파일을 사용하여 빌드하려고 한다고 가정합니다. 그렇지 않다면 Workspace 기반 프로젝트에 대부분 적용 가능하므로 죄송합니다.
요약된 '수정' 버전
근본 원인은 체계의 기본 동작이 공유로 표시될 때까지 체계를 '비공개' 상태로 유지하기 때문입니다.명령줄 시작 빌드의 경우 Xcode UI는 실행되지 않으며 Xcoderun 도구에는 함께 작업할 고유한 Scheme 캐시가 없습니다.목표는 Bamboo가 실행할 계획을 생성, 공유 및 커밋하는 것입니다.
- 코드의 작업 복사본에서 프로젝트의 작업 영역을 엽니다.
- 구성표 > 구성표 관리...를 선택합니다.선택할 수 있습니다.
- 프로젝트에 대해 정의된 구성표 목록이 나타납니다.
- 대나무가 실행하려는 계획 찾기
- 해당 구성표에 대해 '공유' 상자가 선택되어 있고 '컨테이너' 설정이 프로젝트 파일 자체가 아닌 작업 공간으로 설정되어 있는지 확인합니다.
- '확인'을 클릭하여 구성표 관리 시트를 해제합니다.
- 새 .xcs 스키마 파일이 WorkspaceName의 프로젝트에 생성되었습니다.xcworkspace/xc공유 데이터/xcs 스키마.
- 이 파일을 저장소에 커밋하고 Bamboo 빌드를 실행합니다.
보다 심층적인 논의 및 근거
Xcode 4는 Xcode 프로젝트와 관련된 배선 메커니즘을 처리하고 대상을 구축하고 구성을 함께 구축하는 데 내재된 혼란을 해결하는 데 도움이 되는 방법으로 Workspaces 및 Scheme을 도입했습니다.워크스페이스 자체에는 포함된 데이터의 작은 '박스' 각각에 대해 설명하는 자체 구성 데이터 세트가 있으며, 각 개발자 시스템 또는 CI 시스템에 미러링되는 .xcodeproj 파일 및 공유 구성 데이터 세트를 첨부하기 위한 골격 역할을 합니다.이것은 Workspaces의 힘이자 함정입니다. 1) 100% 올바르게 구성된 것을 잘못된 컨테이너에 넣을 수 있는 많은 방법이 있습니다. 2) 올바르게 구성된 것을 올바른 컨테이너에 넣을 수 있지만 부적절하게 구성되어 시스템의 다른 부분에서 데이터에 액세스할 수 없게 됩니다.
Xcode 4 체계의 기본 동작은 프로젝트가 Workspace 파일에 추가될 때 새 체계를 자동으로 생성하는 것입니다.여러 개의 .xcodeproj 파일을 추가한 사용자는 특히 프로젝트 파일이 추가된 후 제거된 후 동일한 작업 공간에 다시 추가될 때 체계 목록이 빠르게 통제되지 않는다는 것을 알고 있었을 것입니다..xcuser 데이터 파일이 프로젝트의 데이터 및 구성과 함께 커밋된 경우에도 자동 생성되거나 수동으로 생성된 모든 구성표는 기본적으로 현재 사용자에게만 표시되는 '개인' 구성표입니다.이것이 xcodebuild에서 발생한 암호화된 빌드 오류의 근본 원인입니다. Bamboo가 Xcode UI가 아닌 명령줄을 통해 빌드를 작동하기 때문에 Scheme이 자동으로 생성되지 않고 작업 공간 자체에 정의된 Scheme에만 의존합니다.다음과 같은 명령을 사용하여 워크스페이스에서 빌드하도록 Bamboo를 구성했다고 가정합니다.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild는 <'workspace' 매개 변수 값>/xcshareddata/xcschheme에 존재하는 파일 <'scheme' 매개 변수 값> .xcschheme을 찾습니다.
Bamboo와 Workspace를 모두 구성할 수 있는 방법은 여러 가지가 있습니다. 따라서 고유한 구성이 여기에 제시된 내용에 100% 매핑되지 않을 수 있습니다.주요 이점:
- Xcode UI가 마법처럼 처리하는 특정 자동화된 작업은 Xcodebuild CLI를 통해 사용할 수 없습니다.
- 구성표를 '컨테이너 계층'의 여러 위치에 부착하고 구성 데이터를 작성할 수 있습니다. 데이터가 올바른 컨테이너(작업영역, 프로젝트 및/또는 대상 빌드)에 연결되도록 합니다.
- 컨테이너 계층에서 xcodebuild 도구가 구성 데이터를 찾을 수 있는 위치를 고려합니다. 검색을 시작할 위치를 나타내는 훌륭한 지표는 '-workspace' 또는 '-project' 인수를 사용하는 것을 기반으로 합니다.
'공유' 상자가 이미 선택되어 있습니다. 이제 어떻게 하시겠습니까?
Bamboo 인스턴스에서 동일한 문제가 발생했습니다. 저장소에서 커밋된 체계가 오래된 것으로 드러났으며 최신 버전의 명령줄 도구가 이를 제대로 처리하지 못했습니다.이전에 이 설정이 존재했기 때문에, 저는 이 설정을 검토하여 이 설정에 대해 명백한 사용자 지정이 없는지 확인하고, '공유'로 표시했는지 확인한 후 다시 생성하여 새 .xcscheme 파일을 저장소에 다시 지정했습니다.
모든 것이 정상으로 보이고 재구성해도 문제가 해결되지 않으면 컨테이너 설정을 다시 확인하십시오. 계층 구조에서 잘못된 컨테이너에 연결하는 것은 매우 쉽습니다!
다음과 같이 문제를 디버그합니다.
xcodebuild -list
또는 작업 공간을 사용하는 경우(예: 포드 사용)
xcodebuild -workspace MyProject.xcworkspace -list
계획이 목록에 없는 경우 다음과 같이 수정합니다.
대부분의 답변은 Xcode를 사용하여 계획을 공유한 다음 repo로 변경할 것을 제안합니다.물론 이는 소스 코드에 액세스할 수 있고 변경 사항을 커밋할 수 있는 권한이 있는 경우에만 가능합니다. 그리고 몇 가지 다른 가정도 마찬가지입니다.
하지만 고려해야 할 "만약의 경우"가 많습니다.
- 만약 당신이 어떤 이유로 Xcode 프로젝트를 수정할 수 없다면 어떻게 하시겠습니까?
- CI 서버에서 자동으로 새 구성표를 생성하면 어떻게 됩니까?
이런 일은 실제로 꽤 자주 일어납니다.Calabash와 같은 테스트 자동화 프레임워크를 사용하는 경우 일반적으로 기존 대상을 복제하게 되며, 이는 자동으로 스키마도 복제하고 새 스키마는 공유되지 않습니다.
루비 & xcode 프로젝션 보석
저는 xcodeproj Ruby gem을 사용하는 것을 추천합니다.이것은 수많은 Xcode 관련 작업을 자동화하는 데 도움을 줄 수 있는 정말 멋진 오픈 소스 도구입니다.
그나저나, 이것은 당신의 Xcode 프로젝트와 작업 공간을 어지럽히기 위해 코코아 포드가 사용하는 보석입니다.
설치합니다.
sudo gem install xcodeproj
그런 다음 간단한 Ruby 스크립트를 작성하여 모든 체계를 다시 공유합니다. 보석에는 해당 목적을 위한 recreate_user_scheme 메서드가 있습니다.
#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save
사용자 폴더의 스키마 파일을 xcshareddata/xcscheme에 복사할 뿐만 아니라 pbxproj 파일을 구문 분석하여 먼저 이러한 파일을 만듭니다.
알겠습니다. 2분 후라는 것은 알고 있습니다만, 스키마를 공유로 설정해야 한다는 또 다른 스택 오버플로를 발견했습니다.Xcode 4는 스킴 데이터를 어디에 저장합니까?
계획이 누락되는 일반적인 이유 중 하나는 커밋을 오리진에 푸시하는 것을 잊었기 때문입니다.누락된 구성표 메시지가 표시되면 먼저 구성표가 공유되었는지 확인한 다음 변경사항을 커밋하고 원본 서버에 푸시했는지 확인해야 합니다.
CI를 구현하는 동안 이 오류가 발생했습니다.위의 질문은 Gitlab의 자체 CI 툴을 사용하고 있다는 점을 제외하고는 제 문제와 동일합니다.대나무에 그런 파일이 있는지 확인할 수 있습니다.
몇 가지 변경을 통해 해결했습니다.gitlab-ci.yml
java.
을 만든 후에.scheme
공유하여 이용할 수 있습니다.에서 Xcode로 합니다.Products>Scheme>Manage Scheme
공유할 공유를 확인합니다.
모든 곳에 절대 경로를 설정합니다.
예를 들면xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
여기서 당신은 바꿀 필요가 있습니다./path/to/your/project/
당신의 길과 함께.testDemo
프로젝트 이름과 함께.
저는 이 문제에 직면했고, 여기에 있는 일부 답변이 실제로 해결책을 제공한다고 해도, 저는 그것이 매우 명확하다고 생각하지 않았습니다.그래서 하나만 더 추가하겠습니다.간단히 말해서 xcode에서 스키마를 공유하는 방법입니다.
다으로로 합니다.Product
>Scheme
>Manage Schemes
그런 다음 공유 여부가 표시된 스키마 목록이 표시됩니다.공유할 항목만 선택하면 됩니다(개발 및 Prod 빌드에 대해 서로 다를 수 있음).
이 기사에서 가져온 이미지 https://developer.nevercode.io/docs/sharing-ios-project-schemes
동일한 문제가 발생했지만 xcode를 메인 프로젝트의 하위 프로젝트로 사용하여 빌드하는 동안.xcode 독립 실행형으로 빌드된 하위 프로젝트 - 그 후 이 오류가 사라졌습니다.
나는 이 스레드와 관련된 나의 경우에 대한 해결책을 추가하고 싶습니다.이것은 기존 프로젝트를 복제하는 사용자를 위한 것으로, 필요한 모든 체계가 이미 공유되고 있습니다.
,와 함께fastlane lanes
모든 계획을 포함하여 모든 차선을 올바르게 표시합니다.
,그렇지만fastlane gym
기본 구성표만 표시(개발 및 테스트 구성표는 표시하지 않음):
솔루션은 다음에 나열되지 않은 구성에 대한 공유 옵션을 선택 취소하는 것입니다.fastlane gym
다시 한 번 확인합니다.그러면 체계에 대한 .xcs 스키마가 생성됩니다.
이제 확인해보면,fastlane gym
모든 계획이 나열됩니다.
그런 다음 .xcshemes 파일을 저장소에 커밋해야 프로젝트를 복제하는 다른 개발자가 파일을 가져올 수 있습니다.
Xcode 11.4를 사용하는 사용자는 구성표에서 "공유" 단추를 찾으려 할 때 이제 개별 구성표로 이동합니다.
- 원하는 구성표 선택
- "편집"을 누릅니다.
- "공유" 상자를 선택합니다.
언급URL : https://stackoverflow.com/questions/14368938/xcodebuild-says-does-not-contain-scheme
'programing' 카테고리의 다른 글
Xcode에서 "작업관리" 주석을 어떻게 표시합니까? (0) | 2023.05.13 |
---|---|
Xcode 프로젝트 이름 변경 방법 (0) | 2023.05.13 |
이클립스에 라인랩이 있습니까? (0) | 2023.05.13 |
런타임 오류:비동기 + apscheduler의 스레드에 현재 이벤트 루프가 없습니다. (0) | 2023.05.13 |
GitHub API에서 기본 인증을 위해 사용자 이름 및 암호와 함께 Invoke-WebRequest 사용 (0) | 2023.05.13 |