1

私と私のチームは、基本プロジェクト + いくつかのプロトコルが内部にあるプライベート ポッドを含む奇妙な状況に陥っています。

問題は、ベース アプリ コードから一部の (プロトコル) 識別子 (プライベート ポッドで定義) にアクセスできないことです。

どうやら私たちの問題は、これら 2 つのスタック オーバーフロー スレッドで説明されている問題とまったく同じようですが、それらの解決策はうまくいきませんでした。

スレッド 1: Swift でソース ファイルが見つからない

スレッド 2: CocoaPod がインストールされているが、Swift コードが表示されない

使用しているスケルトンは次のとおりです。

プロジェクトスケルトン

Commons ポッド (ベース アプリからは確認できないプロトコルを使用) は、次の .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" => "author@mail.mail" }
  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 ポッドをメインの 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

プロトコルを public として定義しました (「Pods」プロジェクト内にあるため、実行されることが期待されます)。

他に何を調べるべきですか?

PS: カスタム プロトコルがメイン アプリから「見えない」だけでなく、メイン アプリに含まれる別の Pod である Alamofire 内で定義されたプロトコルも同様です。それらを使用しようとすると、コンパイル時に XCode が文句を言います。

前もって感謝します。ご挨拶。

EDIT1:問題を絞り込むと、コンパイル時に何かが起こっていると思います。なんで?XCode は CMD + クリック (Pods ファイル構造で定義された 2 つのプロトコル) を押すと問題のあるシンボルを解決できますが、コンパイラはそれを行うことができず、「宣言されていない型の使用」エラーが発生します。

4

1 に答える 1

0

おっ、成功(!?)

私たちが定義していたプロトコルは Framework Pod 内に存在していたので、何が間違っていたのでしょうか?

どうやら、フレームワークの名前をインポートする必要があったようです (プロトコルのクラス名 (!) ではありません)。一種の初心者エラー(?)。

Swift ファイルの上部に「import Commons」と入力すると、すべての「未定義の xxxxxx」エラーが消えました。

ただし、インポートされた Pod が Framework プロジェクトだったためにこの特定のインポート パーツが必要だったのか、それとも偶然にピンを打っただけなのかはわかりません。

私たちが使用している他のいくつかのポッドからインポートされた他のクラスやものは、インポート部分を必要とせず、最初から直接使用できるという印象があります。ということで、これが原因で誤解が生じたのかもしれません(?)。

とにかく、前に言ったように、これらは「カスタム ポッド + スウィフト + フレームワーク + やや複雑なエスケーラブルな .app アーキテクチャ」を使用する初心者の問題です。

この問題とその (主張されている解決策) が、将来の開発者が同様の状況にあることに光を当てることを願いましょう。

ご挨拶。

于 2016-09-13T12:05:25.177 に答える