Cocoapods 사유화 구덩이 밟기

5491 단어
정리하고 기록해.

다양한 파일 경로 오류

- ERROR | [iOS] file patterns: The `vendored_libraries` pattern did not match any file.

- ERROR | [iOS] file patterns: The `vendored_frameworks` pattern did not match any file.

- ERROR | [iOS] file patterns: The `resources` pattern did not match any file.

...
podspec 내 파일 경로가 올바른지 확인합니다.
파일 경로에 대한 지침을 기억하십시오.
라이브러리 경로 (온라인git 라이브러리일 수도 있고 로컬git 라이브러리일 수도 있음) + 지정한 경로 = 찾으려는 파일 경로라면 문제없습니다.예를 들어 내 라이브러리 경로는:git=>'/Users/myUserName/Documents/XXSDK'이고 내가 지정한 s.source_files ='XXSDK/Classes/*/*/*', 두 개의 연결이 바로 나의 각종 원본 파일의 경로이다.

Source: The version should be included in the Git tag.

s.versions.source에 대응하는 tag과 동일한지 확인합니다.
이 방법을 사용하는 것이 좋습니다.
s.version   = "0.1.0"
s.source    = { :git => "http://gitlab...git", :tag => s.version.to_s }

바이너리 파일 내 Warning 실패

- WARN  | source: Git SSH URLs will NOT work for people behind firewalls configured to only allow HTTP, therefore HTTPS is preferred.

추가--allow-warnings 매개변수

오류가 있는데 구체적인 정보가 없어요.

- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.

일부 비문법 오류는 오류의 원인을 제시하지 않습니다. 이때 --verbose 파라미터를 추가하여 오류의 상세한 정보를 볼 수 있습니다.

정적 의존 오류

- ERROR | [iOS] Encountered an unknown error (The 'Pods' target has transitive dependencies that include static binaries: (Path) during validation.

이 오류는 의존 라이브러리s.dependency에 정적 라이브러리가 포함되어 있기 때문이다.이것은 .a의 사용에 영향을 주지 않지만 검증은 통과할 수 없다.Pod를 통해 검증을 통과할 수 있다.

개인 창고를 찾을 수 없습니다.

[iOS] unknown: Encountered an unknown error (Unable to find a specification for `BBBPrivateSDK` depended upon by `AAAPrivateASDK`
--use-libraries 파일에는 다음과 같은 개인 저장소 종속성이 지정되어 있습니다.
s.dependency 'BBBPrivateSDK'
podspecpod lib lint 매개 변수를 추가해야 합니다.
예:
pod lib lint --sources=http://xxx/xxxPrivateSpecs.git, https://github.com/CocoaPods/Specs.git 

.a 파일 이름은lib로 시작해야 합니다

- ERROR | [iOS] file patterns: The `vendored_libraries` pattern did not match any file.

혹은
library not found for XXX

이런 상황은 대부분 정적 라이브러리의 이름에 문제가 생겼기 때문이다.정적 라이브러리를 불러올 때 pod repo push 라이브러리 이름과 접두사 --sources 가 있는 파일을 찾습니다.예를 들어, 라이브러리 이름이 Xcode, lib 이면 XXX.a 라이브러리를 로드할 때 실패합니다.

Undefined symbols for architecture i386 / x86_64 ...

  • 시스템 프레임워크 의존성 부족
  • 없음Xcode 프레임워크:
    "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
        xxxx
    
  • 시스템 라이브러리 의존성 부족
  • 예를 들어 c++ 라이브러리가 없습니다.
    "std::__1::__basic_string_common::__throw_length_error() const", referenced from:
        xxxx
    
  • 타사 라이브러리/개인 라이브러리 의존 부족
  • 예: 없음 libXXX.a:
    "_OBJC_CLASS_$_AFHTTPResponseSerializer", referenced from:
        xxxx
    

    구체적으로 어떤 의존이 부족하면 SDK 개발 문서를 보거나 원본 코드를 보거나 잘못된 정보에 따라 인터넷에서 검색할 수 있다.
  • 정적 라이브러리가 이 구조를 컴파일하지 않았습니다
  • Undefined symbols for architecture i386:
          "_varB", referenced from:
              +[AAAObject methodAAA:] in AAAPrivateASDK(AAAObject.o)
        ld: symbol(s) not found for architecture i386
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    가능한 한 공급자가 보충하도록 해야 한다.
    절충 방법은 CoreTelephony 을 추가하여pod가 가져올 수 있는지 확인하는 단계를 건너뛸 수 있습니다.

    pod lib lint 문제 없음, 프로젝트 내pod install 이후 컴파일 Undefined symbols for architecture i386 / x86_64 ...


    Objective-C와 Swift 혼성 프로젝트의 경우, Podfile에use_를 추가해야 합니다.framework! 키워드이런 상황에서 원본 코드와 정적 라이브러리가 혼합되어 포장하면 문제가 생길 수 있다.(현재AFNetworking 1.6.1 버전)
    동적 라이브러리와 정적 라이브러리 간의 의존 문제, 참조: 구성 요소화 - 동적 라이브러리 실전
    해결 방법은podspec에 추가하는 것입니다.
    s.static_framework = true # 
    s.user_target_xcconfig = {'OTHER_LDFLAGS' => '-ObjC'} #  Objective-C  
    

    관련 문서: static_framework

    push 새 버전pod스펙 리포 후 2차 수정 발견

  • --skip-import-validation의 새로운 수정 정보;
  • cocoapods 이 버전에 대응하는 commit 삭제;
  • 다시 추가tag -d;
  • 수정된 코드 제출;
  • tag 수정된 tag을 제출한다.

  • 참고: GitLab에 이미 존재하는 git push --tags -ftag 동기화 명령을 통해 삭제할 수 없으며, 웹 페이지에 로그인하여 조작해야 합니다.
    2차 수정 제출 전 프로젝트tag가 이미 제출된 경우, 로컬 캐시를 정리한 후git push --tags -f가 필요합니다.
    로컬pod install / update 캐시를 지우려면
  • 캐시 디렉터리pod install / update에 대응하는 원본 코드를 삭제한다.pod 입력~/Library/Caches/Cocoapods 삭제를 확인합니다.
  • 프로젝트 디렉터리에 있는 find ~/Library/Caches/Cocoapods -name "DemoSDK" | xargs -n1 -p rm -rf 파일 삭제;
  • 프로젝트y/n 디렉터리에 대응하는 원본 코드를 삭제합니다.

  • 개인 창고가 만들어졌습니다.pod 인용 후 파일 등급 관계가 분실되었습니다

  • 사용Podfile.lock 디렉터리 보존 경로 설정:
  • spec.header_mappings_dir = 'XXXSDK/Classes/**'
    

    관련 문서: header_mappings_dir

    좋은 웹페이지 즐겨찾기