programing

xcode에서 iOS App 아카이브를 생성할 수 없습니다.

subpage 2023. 5. 4. 19:58
반응형

xcode에서 iOS App 아카이브를 생성할 수 없습니다.

응용 프로그램에서 iOS App 아카이브를 생성하는 데 문제가 있습니다.그 애플리케이션은 컴파일이 아주 잘 되고 시뮬레이터에서도 작동합니다.이제 저는 몇 가지 임시 테스트를 하고 싶었지만 iOS 앱 보관소를 생성할 수 없습니다.제품 -> 보관을 클릭하면 일반 xcode 보관이 생성됩니다.누가 나를 도와줄 수 있습니까?저는 이 애플리케이션의 iOS 앱 아카이브를 이미 생성했다고 언급해야 합니다.어떤 이유로 iOS 아카이브 생성이 중단되었습니다.정말 감사해요.

빌드 설정 확인:

  1. 기본 프로젝트 대상에 대해 설치 건너뛰기가 NO입니다.
  2. 프레임워크(하위 프로젝트) 대상의 경우 설치 건너뛰기가 예입니다.
  3. 하위 프로젝트의 빌드 단계에서 머리글 복사는 공용이 아닌 프로젝트에 있어야 합니다(고정 라이브러리를 빌드하는 경우에는 적용되지 않음).
  4. 배포 아래의 설치 디렉토리가 유효합니다(/예: 애플리케이션).

프레임워크/라이브러리를 추가한 경우 이 문제가 발생할 수 있습니다.해당 라이브러리의 대상->빌드 설정을 편집하고 '설치 건너뛰기' 설정을 '예'로 설정해야 합니다.재아카이브 시 XCode는 '일반 xcode 아카이브'가 아닌 'iOS App Archive'를 다시 생성해야 합니다.

설치를 건너뛰는에도 앱 프로젝트 내에서 다른 lib/framework 프로젝트를 연 경우에는 빌드 단계/복사 헤더에서 헤더를 공용에서 프로젝트로 이동해야 합니다.

lib/framework 대상의 빌드 단계

저는 제게 도움이 되도록 하기 위해 다음과 같이 했습니다.

  1. 저는 320개의 정적 라이브러리를 가지고 있었고, 주요 프로젝트에 파일을 포함하기 위해 코코포드를 사용했습니다.
  2. 다른 모든 하위 프로젝트/정적 라이브러리에 대한 건너뛰기 설치를 수행하고 위에서 언급한 대로 복사 헤더를 공용에서 프로젝트로 전환했습니다.
  3. 가장 중요한 것: 프로젝트에서 사용하는 각 라이브러리에서 빌드 단계로 이동 -> 파일 복사대상 변경 확인Absolute pathproducts directory참고: 이 오류의 원인이 되는 라이브러리를 찾기 위해 검색 범위를 좁히려면 아래 힌트를 참조하십시오.

그리고 그게 끝이었습니다!

힌트: 아카이브가 ipa가 아닌 아카이브 파일을 만드는 원인이 되는 문제가 있는 파일에 대한 정보를 얻으려면 다음을 수행합니다.

  1. 보관 파일을 선택하고 배포 버튼을 클릭합니다.
  2. '제조된 제품 저장' 옵션을 선택합니다.
  3. [다음]을 누르고 저장합니다.
  4. 파인더에서 작성된 디렉토리를 찾습니다.
  5. '라이브러리' 하위 디렉터리는 설치 건너뛰기를 예로 설정하는 데 필요한 라이브러리를 식별합니다.
  6. 경우에는usr/local/include에서는 Public(공용)에서 Project(프로젝트)로 이동해야 하는 범죄자 헤더 파일이나 절대 경로에서 products(제품) 디렉토리로 변경해야 하는 파일(또는 설치 건너뛰기를 yes(예) 플래그로 설정하지 않은 파일)을 식별합니다.그러나 해당 디렉터리(즉, usr/local/dll)는 하위 라이브러리 디렉터리 구조에 따라 다릅니다.많은 경우에..위의 3단계에서 파일 복사 아래에 나열된 모든 파일이 여기에 나열됩니다.여기서 그들을 찾으면 문제의 원인에 대한 확실한 답을 얻을 수 있습니다.

힌트로 업데이트: 삶을 훨씬 더 단순하게 만들기 위해.위의 힌트에서 4단계 아래에 나타나는 파일.단순히 xcode의 글로벌 검색에서 그것을 검색합니다.그리고 당신은 당신이 원하는 것에 대한 즉각적인 결과를 얻어야 합니다.예를 들어, 이것은 내 폴더의 내용이었습니다(위의 힌트에 있는 단계 참조).

여기에 이미지 설명 입력

그래서 나는 그것이 암호화 및 SSL 라이브러리와 관련이 있다고 말할 수 있었습니다.검색:

여기에 이미지 설명 입력

설치 건너뛰기를 예로 설정하는 것을 잊었다는 것을 깨닫게 했습니다.

보관 파일을 내보내는 경우, 보관 파일을 열고 다음을 확인합니다./urs/local/include제품에서 이 제안을 시도해 보십시오.

의 각포에서드 아래에서 래아▁in.Packaging,Private Headers Folder Path그리고.Public Headers Folder Path으로 설정됨/usr/local/include삭제하면 유효한 보관 파일을 얻을 수 있습니다.

여기에 이미지 설명 입력

리액트 네이티브 앱을 업그레이드한 후 작업했습니다.0.11.0엑스코드7 코코아 포드 및아드포코코▁and드.0.39.0.beta.4.

WatchKit 또는 Today Extension과 함께 코코아 포드를 사용하는 경우 코코아 포드 레포에서 문제가 무엇인지 설명하는 미해결 문제가 있습니다.

저를 위한 해결책은 그것을 제거하는 것이었습니다.Copy Pod ResourcesWatchKit Extension 및 Today Extension 대상에서 단계를 수행합니다.Build Phases제가 이렇게 하자 프로젝트가 예상대로 컴파일되고 보관되었습니다.

이것이 누군가에게 도움이 되기를 바랍니다, 이것은 저를 하루 종일 힘들게 했습니다!

위의 답변 중 하나라도 작동하지 않는 경우 문제는 다음과 같습니다.cocoaPods 업데이트 최신트이0.38.1나를 위해 일을 엉망으로 만들었지만, 나는 그 다음으로 다운그레이드했습니다.0.37.1그리고 모든 것이 정상으로 돌아왔습니다.용사를 합니다.Xcode 6.3.1

나중에 편집: 업데이트 대상0.38.2또한 이것을 고칠 것입니다.이 문제의 원인에 대한 자세한 내용은 여기에서 확인하십시오. Cocoapods 0.38.1은 유효한 보관 파일을 만들지 못했습니다.

제가 Xcode5를 사용하고 있고 이를 분류한 것은 빌드 스킴을 편집하는 것이었지만, 제 경우에는 위의 모든 제안을 시도하는 것이 도움이 되지 않았습니다.

저는 "앱"과 "앱 프리"라는 두 가지 목표를 가지고 있었습니다.일반 보관에 대한 문제는 앱의 '일반' 버전 다음에 추가한 무료 버전을 보관하려고 할 때 발생했습니다.내 경우, 도구 모음에서 구성표를 선택하고 구성표 편집을 선택했을 때...저는 빌드 섹션에 앱과 앱 프리라는 두 가지 대상이 있는 것을 보았습니다.

App FREE 열만 선택한 상태에서 App에 대한 모든 열을 선택 취소하고 OK를 클릭했습니다.다음 번에 제품 > 보관을 선택했을 때 일반 보관 대신 앱을 무료로 받았습니다.:)

프로젝트가 하나만 있다면 이 솔루션이 유용할 것입니다.이 문제는 제가 타겟을 복제했을 때 발생했습니다.그 결과 두 개의 목표물이 병렬로 구축되었습니다.이로 인해 문제가 발생했습니다.일반 IOS 아카이브가 구축되었습니다.

병렬 빌드를 끄려면 다음으로 이동합니다.

  • 구성표 관리,
  • 구성표 편집,
  • 빌드,
  • 다른 대상을 제거합니다.

iOS 9와 Xcode 7로 업데이트한 후 이 문제가 발생했습니다.Josh H의 솔루션은 저에게 도움이 되었습니다.

각 포드의 패키징에서 개인 헤더 폴더 경로 및 공용 헤더 폴더 경로가 /usr/local/include로 설정되어 있습니다.삭제하면 유효한 보관 파일을 얻을 수 있습니다.

이 작업을 자동으로 수행하기 위해 Pod 파일에 대한 설치 후 스크립트도 만들었습니다!

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

하고 Pod 파일을 실행하면 됩니다.pod install

저는 이 문제가 있었습니다.저의 경우, iOS 앱의 종속성으로 Mac 앱 대상을 유지했기 때문에 발생했습니다.

이렇게 설정된 이유는 Mac 앱이 iOS 앱의 일부 데이터를 생성하는 데 사용되는 도구였기 때문이며, 이는 번들에 포함되었습니다.

iOS 앱 자체를 빌드하기 전에 그 종속성을 제거하고 툴을 따로 빌드해야 했습니다.

제 시나리오에서 저는 주로 Objective-C 프로젝트에 Swift 코드를 포함하기 시작한 후에야 잘못된 "Generic Archive"를 받았습니다.Xcode가 뱉어내고 있는 아카이브 파일에 대한 많은 문제 해결과 검사 후에, 저는 그것을 알아차렸습니다.SwiftSupport폴더(스위프트 런타임에 필요한 dylib 포함)가 내 아카이브의 다른 위치에 있었습니다.

나는 찾았습니다.Installation Directory빌드 설정이 프로젝트에서 사용자 지정 경로로 설정되었음을 알게 되었습니다.단순히 삭제했습니다(일반적인 값으로 설정)/Applications) 다음 -> 앱 그리고 다음 빌드 -> 아카이브는 예상대로 작동했고 적절한 iOS 앱 아카이브를 제공했습니다.

TL; DR: 다음 사항을 확인합니다.Installation Directory인 " 빌설정기인값본"로 ./Applications앱에 Swift 코드를 포함하는 경우, 특히 예기치 않은 레거시 빌드 설정이 있을 수 있는 이전 프로젝트 파일로 시작하는 경우.

작업 공간에 여러 개의 프로젝트(GTL, Pods 및 주요 프로젝트)가 있으며, 다음과 같은 이점이 있습니다.

프로젝트를 선택합니다. 두 가지 유형이 있습니다. 프로젝트대상이 있습니다.

당신의 주요 취향이 아닌 프로젝트의 경우GTL또는PODS:

프로젝트:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

대상:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

기본 프로젝트(일반적으로 제품명과 동일한 이름)의 경우:

프로젝트:

Skip Install = NO
Installation Directory = /Applications

대상:

Skip Install = NO
Installation Directory = /Applications

각 프로젝트 및 대상의 ios 배포 대상을 확인하여 모두 동일한지 확인합니다.

같은 여정에서 다른 사람들을 구하기 위해 이 일을 여기에 남겨두는 것.

작업 공간의 정적 라이브러리 대상에서도 동일한 Copy Pod Resources 빌드 단계를 제거해야 했습니다.

알렉스 L의 대답에 추가.

포인트 3.'Build Settings' -> 'Public Header Folder Path'를 'include/xxx'로 변경하는 것도 작동합니다.

위의 어떤 것도 당신에게 도움이 되지 않았다면...많은 시간이 흐른 후에...

Bundle Version Short 1.0.Bad만으로도 충분히 만족했기 때문에 Bundle Version용 Info.plist의 값을 삭제했습니다. 이러지 마.

*참고로 저는 실제로 Info.plist 파일에 빈 키가 있을 것이라는 것을 깨닫지 못하고 오른쪽의 UI에서 편집함으로써 이 작업을 수행했습니다.저는 그것이 그것을 무효로 만든다고 생각합니다.내 번들은 보관 중에 다른 항목으로 표시되고 아이콘이 없어서 어디에도 업로드할 수 없었습니다.

이는 Info.plist의 잘못된 값으로 요약됩니다.유효한 보관 파일이 아닌 경우 이전 보관 파일의 압축을 풀고 현재 보관 파일을 삭제/덮어쓰기하여 보관 파일을 다시 작성할 때 문제가 해결되는지 확인합니다.

  1. 빌드 설정으로 이동하여 추가

    코드 서명 사용 권한에 대한 AppName/Resources/dist.plist

  2. iOS 디바이스 또는 빌드 대상으로 선택된 실제 디바이스에서 cmd + B를 누릅니다.

  3. 완료되면 -> "제품" 폴더로 스크롤하고 AppName.app을 마우스 오른쪽 버튼으로 클릭합니다.

  4. "파인더에 표시"를 선택합니다.

  5. 이름 페이로드를 사용하여 폴더 생성(대문자 "P"

  6. 이름을 페이로드 폴더에 복사

  7. 페이로드 폴더에서 zip 만들기

  8. zip 이름을 AppName.ipa변경합니다.

다 했어요.

거의 모든 것을 시도한 후:

  • 정리, 보관
  • 파생 데이터 삭제, 보관
  • Xcode를 다시 시작합니다(XCode7을 사용하고 있었습니다), 보관
  • 위의 조합...

부팅 파티션의 사용 가능한 디스크 공간이 부족합니다(약 1GB).다시 부팅한 다음 약 18GB의 여유 용량을 얻었습니다.

그런 다음 Xcode와 프로젝트를 열고 Archive...를 수행했습니다.놀랍게도 (1시간 동안 아카이브 구축을 시도한 후) 마침내 일반 아카이브가 아닌 아카이브를 얻었습니다.

디스크를 수리한 것이 빈 디스크 문제인지 아니면 수정한 macOS를 재부팅한 것인지는 모르겠지만, 저에게는 효과가 있었습니다.

Project>에 .xcodeproj 파일이 있는 경우Targets > Build Phase > target 종속성은 여기서 제거한 다음 ipa를 빌드합니다.저한테는 효과가 있어요.건배.

xcode는 iOS App Archive 대신 일반 xcode Archive를 만들고 있습니다.

저의 경우, 저는 FMDB와 BlocksKit를 모두 정적 라이브러리로 이동해야 했습니다.이전에는 하위 프로젝트로 구축되었습니다.lipo를 사용하여 범용 라이브러리를 만들 수 있습니다.최종 제품을 제작할 때 시뮬레이터 코드가 자동으로 제거됩니다.

이에 대한 또 다른 가능한 이유는 "대상 종속성"에 다른 플랫폼의 프로젝트에 대한 참조가 있기 때문입니다.저의 경우에는 OSX와 iOS용 코드를 공유하는 프로젝트를 진행하고 있었습니다.iOS 대상 중 하나에서 실수로 OSX 대상을 종속성으로 추가했습니다.

철저하게 하기 위해, 저는 제 해결책을 게시합니다.

저는 Xcode 5.1.1(5B1008)에서 iOS 프로젝트의 Archive를 구축하는 과정에서 똑같은 문제를 경험했습니다.위의 제안 중 어떤 것도 문제를 해결하지 못했으며 대부분은 관련이 없었습니다(Framework를 추가하지 않았으며 빌드 단계의 Copy Headers 섹션에 공용 항목이 없습니다).

저의 경우, 문제를 해결하는 것은 단순히 프로젝트를 닫고, 이전에 만든 아카이브를 삭제하고, 기본 설정 > 계정으로 이동하고, 개발자 계정을 제거하고, Xcode를 종료하고, 다시 시작하고, 개발자 계정을 다시 추가하고, 아카이브 프로세스를 다시 시작하는 것이었습니다.이것은 저의 문제를 즉시 해결했습니다.

한가지 해결책이 더 있습니다. 위의 모든 것들이 저에게 효과가 없었기 때문에...

변내용경을 했습니다.User Header Search Paths)Header Search Paths일할 수 에서 우아게작것니다입동할하)다▁would것▁just니▁to입▁work작antly)까지"$(BUILT_PRODUCTS_DIR)/BlocksKit".

배경:

BlockKit에서 개발자는 기본 프로젝트의 헤더를 배포 시 구조와 다르게 구성했습니다.따라서 프로젝트의 헤더를 참조할 수 없으며 빌드 디렉토리에 복사된 헤더를 참조해야 합니다.

(Xcode 5)에서 이 작업이 수행된 방식은 2개의 대상이 있었고, 체계를 편집했을 때 체계 편집기의 왼쪽 창에 [빌드, 실행, 테스트, 프로파일 XXX]가 표시됩니다.APP, ANALYZE, ARCHIVE]는 BUILD 창에서 프로젝트 대상을 목록에 표시합니다.오른쪽 끝에 보관 선택사항이 표시됩니다. 보관할 대상이 하나만 선택되었는지 확인하십시오.

프로젝트에서 2개의 타겟을 선택했는데, 제품에서 원하는 타겟만 확인해보니 효과가 있었습니다!

저는 XCode에서 앱 프로젝트만 열어서 이 오류를 해결했습니다. 즉, 애플리케이션과 다른 프로젝트/라이브러리/프레임워크로 구성된 작업 공간을 열지 않았습니다.

두 개의 다른 프로젝트, 프레임워크 또는 공유 라이브러리와 iOS 애플리케이션을 가지고 있었기 때문에 각각을 적절하게 구축하기 위해 공통의 .xcodeproj 파일 대신 .xcodeproj 파일을 직접 열어서 두 개의 다른 XCode 창을 열어야 했습니다.

좋은 부작용으로 XCode는 Clean을 수행한 후 모든 프로젝트의 모든 대상을 더 이상 재구축하지 않으므로 빌드 시간이 단축됩니다.

배경:저는 오픈 소스 SDK와 데모 iOS 애플리케이션을 만들고 있습니다.저는 둘 다 하나의 작업 공간에서 열었습니다.SDK 대상에서 설치 건너뛰기설정하면 보관 파일이 비어 있기 때문에 다른 사용자가 보관 파일을 만들 수 없게 되므로 이 옵션은 사용할 수 없습니다.공용 헤더 대신 프로젝트를 사용하면 아카이브에 배포해야 할 헤더 파일이 누락될 수 있으므로 이 또한 옵션이 아닙니다.

그것은 제가 작업 공간에서 일하고 있었기 때문입니다.프로젝트가 아카이브되었지만 전자수첩 창에는 표시되지 않습니다.나는 작업 공간을 닫고 프로젝트를 스스로 열었습니다.보관된 파일이 주최자에서 열려 있습니다.도움이 되길 바랍니다.

저의 경우 일부 임시 파일을 다음에 복사하는 사용자 지정 스크립트가 있었습니다.

${TARGET_BUILD_DIR}/myTempDir

즉, 아카이브 내용을 조사한 후 .app 파일 바로 옆에 myTempDir 폴더가 있다는 것을 알게 되었습니다.다른 곳에 저장하기 위해 스크립트를 수정하면 모든 것이 정렬됩니다.

Framework projet의 Public Headers Folder Path에서 $(PROJECT_NAME)라이브러리 대상의 빌드 설정으로 이동한 다음 공용 헤더 폴더 경로를 $(PROJECT_NAME) 헤더로 편집해야 합니다.

코코팟 v.0.38.2와 함께 Xcode 7을 사용하는 경우.제거 시도copy pod resources당신의 오늘 연장 목표로부터.

여기에 이미지 설명 입력

iOS 앱의 프로젝트에 OS X 명령줄 도구를 추가한 후 이 문제가 발생했는데 명령줄 도구의 대상에 대해 기본적으로 설치 건너뛰기가 NO로 설정되었습니다.iOS 기기에 OS X 이진 파일을 설치할 수 없기 때문에 보관은 기본적으로 일반 X 코드 아카이브로 설정됩니다.이 대상에 대해 설치 건너뛰기를 예로 설정하면 문제가 해결되었습니다.

언급URL : https://stackoverflow.com/questions/10715211/cannot-generate-ios-app-archive-in-xcode

반응형