2016-09-12 2 views
1

본인과 팀은 내부 프로젝트와 개인 프로젝트가 관련된 이상한 상황에 처하게됩니다.XCode에서 개인 Pod (Swift) 내에서 정의 된 프로토콜을 사용하려고 할 때 '선언되지 않은 유형 사용'이라고 말합니다.

Google의 기본 앱 코드에서 (개인용 포켓에 정의 된) 일부 프로토콜 식별자에 액세스 할 수 없다는 문제가 있습니다.

분명히 우리의 문제는이 2 개의 스택 오버 플로우 스레드에서 설명한 것과 똑같은 것 같지만 솔루션은 우리와 함께 작동하지 않습니다.

스레드 1 : Source files not found in Swift

스레드 2 : CocoaPod installed but doesn't see Swift code

우리가 사용하고있는 해골이 하나입니다 프로토콜과

Project Skeleton

우리 커먼즈 포드 (우리는 할 수 없습니다 기본 앱에서 볼 수 있음)은 .podspec 파일로 정의됩니다.

Pod::Spec.new do |s| 

    s.name   = "Commons" 
    s.version  = "0.1.10" 
    s.summary  = "Commons framework" 

    s.description = <<-DESC "Commons framework" 
        DESC 

    s.homepage  = "http://EXAMPLE/Commons" 

    s.license  = { :type => "Commercial" } 

    s.author    = { "Author" => "[email protected]" } 
    s.source  = { :git => "GITLAB_PRIVATE_URL/commons-iOS-Pod.git", :tag => s.version } 

    s.source_files = "Commons", "Commons/**/*.{h,m,swift}" 
    s.exclude_files = "Commons/Exclude" 

end 

우리의 기본 응용 프로그램에서 우리는 다음과 같은 Podfile을 가지고 있습니다 (Commons pod를 우리의 주된 xcworkspace에 가져 오기 위해).

# Uncomment this line to define a global platform for your project 
platform :ios, '8.0' 

target 'ios-appbase' do 
    # Comment this line if you're not using Swift and don't want to use dynamic frameworks 
    use_frameworks! 

    pod 'Alamofire' 
    pod 'ViewDeck' 
    pod 'JLRoutes' 

    pod 'Commons', :git => 'GITLAB_PRIVATE_URL/commons-iOS-Pod.git', :tag => '0.1.4', :branch => 'develop' 
    pod 'RestManager', :git => 'GITLAB_PRIVATE_URL/RestManager-iOS-Pod.git', :tag => '0.1.3' 
    pod 'BaseClasses', :git => 'GITLAB_PRIVATE_URL/BaseClasses-iOS-Pod.git', :tag => '0.1.3' 
    pod 'DesignManager', :git => 'GITLAB_PRIVATE_URL/DesignManager-iOS-Pod.git', :tag => '0.1.2' 

end 

우리는 프로토콜을 공개로 정의했습니다 ('Pods'프로젝트 내에 있기 때문에 완료 될 것으로 예상 됨).

다른 무엇을 조사해야합니까?

추 신 : 우리의 주 앱뿐만 아니라 우리의 주 앱에 포함 된 다른 포드 인 Alamofire 내부에 정의 된 프로토콜도 "보이지 않음"입니다. 우리는 그것들을 사용하려고 노력하고 컴파일시에 Xcode가 불평합니다.

미리 감사드립니다. 인사말.

EDIT1 : 우리의 문제를 좁히고, 우리는 그것이 컴파일 시간에 일어난 일이라고 생각합니다. 왜? Xcode는 CMD + Click (Pods 파일 구조에 정의 된 두 개의 프로토콜)을 사용하여 잘못된 기호를 해결할 수 있기 때문에 컴파일러는이를 수행 할 수 없으며 "선언되지 않은 유형 사용"오류로 불평하는 사람입니다. 성공

+0

포드를 추가 한 후에 프로젝트를 청소 해보십시오. – impression7vx

+0

우리는 전후에 프로젝트를 정리했습니다. 심지어 파생 된 데이터. – Isaac

답변

0

Whops,

그래서 우리는 프레임 워크 포드 내부에 살고 정의 된 프로토콜 (!?) : 우리가 잘못하고 있었던거야?

분명히 우리는 프로토콜 (!)의 클래스 이름이 아닌 프레임 워크의 이름을 가져와야했습니다. 일종의 초보자 오류 (?).

신속한 파일의 맨 위에 "가져 오기 커먼즈"를 입력하면 "정의되지 않은 xxxxxx"오류가 모두 사라졌습니다.

임포트 된 포드가 프레임 워크 프로젝트이거나 우리가 우연히 못을 치기 때문에 특정 임포트 파트가 필요한지 확실하지 않습니다.

우리가 사용하고있는 일부 다른 클래스에서 가져온 다른 클래스 및 항목에 가져온 부분이 필요하지 않으며 처음부터 직접 사용할 수 있습니다. 그래서 우리의 오해는 이것 (?)에 의한 것일 수 있습니다.

어쨌든, 전에 말했듯이, 이들은 "custom pods + swift + Frameworks + 어떻게 든 복잡한"확장 가능한 .app 구조 "를 사용하는 초보자 문제입니다.

이 문제와 해결책 (혐의가있는 해결책)이 향후 개발자에게 유사한 상황에 있음을 알리기 바랍니다.

인사말.

관련 문제