1. ホーム
  2. アイオス

CocoaPodsへのオープンソースフレームワーク

2022-03-15 20:41:41
<パス

CocoaPodsへのアップロードとバグまとめ


I. GitHubにコードをアップロードする

1. ローカルリポジトリを作成する git init
2. originという名前のリモート接続を追加する git remote add origin 'Github project address'
3. ローカルコードをローカルリポジトリに追加する git add .
4. 変更をローカルリポジトリにコミットする git commit -m 'change log'
5. masterブランチのコードを、orgiginという名前のリモートリポジトリにプッシュします。 git push origin master

次に、タグを打ちます。

タグ付けの目的は、オープンソースのフレームワークにバージョン番号を与えることと同等です

1. cd リポジトリ ディレクトリ
2.ローカルタグを表示する git tag
3. ローカルタグの追加 1.0.0 git tag -a 1.0.0 -m 'release 1.0.0'

4. タグをリモートに渡す git push origin --tags

iii. 削除

1. ローカルタグを削除する git tag -d 1.0.0
2. リモートタグを削除する git push origin -d tag 1.0.0
3. 指定されたバージョンのトランクライブラリを削除する pod trunk delete KJEmitterView 0.0.1
4. ポッドの全バージョンを削除する pod trunk deprecate KJEmitterView
  • 削除後の再ポッドレポ処理 pod repo update

IV. トランクの登録

1. トランクの登録 pod trunk register mailbox 'username' --description='description'





成功すると、メールが届きますので、そのメールに記載されているリンクをクリックすることで確認することができます。

2. メールを開き、アドレスをクリックします。https://trunk.cocoapods.org/sessions/verify/965b5e96

赤い端末をクリックすると、端末にジャンプします



3. 登録方法 pod trunk me

サクセスには、以下のようなフィールドが表示されます。



4. 新規メンバーの追加(ポッドライブラリの変更とアップロードが可能です) pod trunk add-owner name mailbox
5. メンバーを削除する。 pod trunk remove-owner email address

V. MITファイルの取得

1. ウェブリンク https://choosealicense.com/





コピー、対応するデータの修正



2. 生成されたLICENSEファイルをGithubに同期させる

VI. 自分のプロジェクトのPodspec記述ファイルを作成する

1. Podspecファイルを作成します。 pod spec create KJEmitterView
2.ポッドスペックファイルのコード
Pod::Spec.new do |s|
  s.name = "KJEmitterView"
  s.version = "1.0.0"
  s.summary = "Some iOS Emitter"
  s.homepage = "https://github.com/yangKJ/KJEmitterView"
  s.license = "MIT"
  s.license = { :type = > "MIT", :file => "LICENSE" }
  s.license = "Copyright (c) 2018 yangkejun"
  s.author = { "77" => "[email protected]" }
  s.platform = :ios
  s.source = { :git => "https://github.com/yangKJ/KJEmitterView.git", :tag => "#{s.version}" }
  s.social_media_url = 'https://www.jianshu.com/u/c84c00476ab6'
  s.requires_arc = true

  s.default_subspec = 'Kit' # The default file to introduce
  s.ios.source_files = 'KJEmitterView/KJEmitterHeader.h' # Add header file

  s.subspec 'Kit' do |y|
    y.source_files = "KJEmitterView/Kit/**/*. {h,m}" # Add the file
    y.public_header_files = 'KJEmitterView/Kit/*.h',"KJEmitterView/Kit/**/*.h" # Add header files
    y.frameworks = 'Foundation','UIKit','Accelerate'
  end

  s.subspec 'Control' do |a|
    a.source_files = "KJEmitterView/Control/**/*. {h,m}" # Add the file
    a.public_header_files = "KJEmitterView/Control/**/*.h",'KJEmitterView/Control/*.h'# Add header file
    a.dependency 'KJEmitterView/Kit'
    a.frameworks = 'QuartzCore'
  end

  ss.subspec 'Classes' do |ss|
    ss.source_files = "KJEmitterView/Classes/**/*. {h,m}" # Add the file
    ss.public_header_files = "KJEmitterView/Classes/**/*.h",'KJEmitterView/Classes/*.h'# Add header file
    ss.resources = "KJEmitterView/Classes/**/*. {bundle}" # add datafiles
    ss.dependency 'KJEmitterView/Kit'
  end

  ss.subspec 'Function' do |fun|
    fun.source_files = "KJEmitterView/Foundation/**/*. {h,m}" # Add the file
    fun.public_header_files = 'KJEmitterView/Foundation/*.h',"KJEmitterView/Foundation/**/*.h" # Add header files
    fun.dependency 'KJEmitterView/Kit'
  end
  
end


3. ローカルのPodspecファイルを検証する pod spec lint KJEmitterView.podspec
4. 警告を無視する pod spec lint KJEmitterView.podspec --allow-warnings
5. 警告を無視し、進捗状況を確認できるバリデーション pod spec lint KJEmitterView.podspec --allow-warnings --verbose
6. ネットワーク認証不要 pod lib lint --verbose --allow-warnings

成功の確認




VII. CocoaPodsへの受け渡し

1. まずローカルのPodspecファイルを検証し、そのspecファイルをtrunkにアップロードする
2. Podspecファイルをtrunkにアップロードする pod trunk push KJEmitterView.podspec
3. 警告アップロードを無視する pod trunk push KJEmitterView.podspec --allow-warnings

成功は以下の通りです。



3. 常にUpdating spec repo masterの状態で、更新する。 pod repo update --verbose
4. アップロードが成功したかどうかを確認する pod search KJEmitterView
5. トランクの上にあるライブラリを削除する pod trunk delete KJEmitterView 0.0.1

VIII. 課題のまとめ

1. trunkへの登録でエラーが発生しました: getaddrinfo: nodename nor servname provided, or not known
  • 解決方法 ShadowSocksを開き、ShadowSocksをオフにして再試行、根本原因は正しいDNSでないこと
  • 解決策へのリンクを添付します: https://link.jianshu.com/?t=https://github.com/CocoaPods/CocoaPods/issues/2174
2. ライセンス ライセンスファイルが見つからない
  • 理由 ライセンスファイルが見つかりません。規則によれば、ポッドスペックファイルに直接書き込むこともできます。
  • 解決方法 Podspec ファイルに以下を追加します。
  • s.license = "Copyright (c) 2018 yangkejun"
3. ソース バージョンはGitタグに含めること。
  • 理由 podspec のバージョンは git のタグと一致する必要があります。
  • 解決方法 現在のタグを確認します。 git tag リモートエンドにプッシュする。 git push --tags
4. の重複したエントリーを受け付けることができません。KJEmitterDemo (1.0.0)
  • 理由 重複
  • 解決策
- 4.1. Re-add tag to git repository git tag -a 1.0.1 -m'release 1.0.1'
- 4.2. upload to remote git push origin --tags
- 4.3.Modify the podspec file again s.version = "1.0.1"
- 4.4.Check the pod spec again lint KJEmitterDemo.podspec --allow-warnings`
- 4.5. Final upload pod trunk push KJEmitterDemo.podspec


5. KJEmitterDemo に一致する名前、著者、要約、説明を持つ Pod が見つかりません。

理由 審査に2~3日かかっている



解決策

- Execute the pod setup command to update the local dependencies, and then search

- If it doesn't work, delete the search_index.json file in the ~/Library/Caches/CocoaPods directory
- Execute rm ~/Library/Caches/CocoaPods/search_index.json and then execute search again


成功は以下の通りです。



6. チェックサムが通らない





考えられる原因 github上のタグファイルのフォーマットが決定しているため、下記の場所をダウンロードして、ローカルのファイルフォーマットと一致しているかどうかを確認する。一致しない場合、以下のようにバグを修正する。



解決策

- Remove local tag: git tag -d 1.0.0
- Remove the remote tag: git push origin -d tag 1.0.0
- Re-add local tag: git tag -a 1.0.0 -m 'release 1.0.0'
- Re-upload to the remote: git push origin --tags
- Verify again: pod spec lint KJEmitterView.podspec


7, [!] 新しいバージョンをtrunkにプッシュする際にエラーが発生しました: 実行が終了しました。
  • 理由:プッシュが期限切れになった
  • 解決方法 Podspec ファイルを trunk に再転送する pod trunk push KJEmitterView.podspec
8. public_header_files: このパターンは、source_files にリストされていないヘッダーファイルを含みます。
  • 理由 フォルダ階層が浅いため、該当するファイルが見つからない。
  • 解決策 デフォルトのヘッダーファイルのディレクトリが s.public_header_files = 'KJEmitterView/Classes/**/*.h'



    ただし、Classesディレクトリにあなたのコードのフォルダ階層が2階層以上ある場合、このエラーが発生します。ファイル階層を変更するには
9、最新版のポッドライブラリを検索できない
  • 理由:ポッドライブラリが更新されていないため
  • 解決策
Update the pod library pod update xxx
Check the Podfile file for the latest version of the dependent libraries pod outdated


10. このコードには __weak typeof(self) weakSelf = self;
  • 理由 weak は検証に失敗し続ける
  • 解決策 s.frameworks に __weak を利用できるライブラリを追加する。
11. このコードには dispatch_source_t 図書館関係
  • 理由 そこには dispatch_source_t 関連するライブラリ関数で、これも検証に失敗し続けます。
  • 解決方法 で動作するライブラリ関数を s.frameworks に追加する。 dispatch_source_t ライブラリ
12. [KJEmitterView/Classes] xcodebuild: KJEmitterView/KJEmitterView/Classes/AlertView/KJAlertView.m:163:116: error: property 'height' not found on object of type 'UILabel *'(プロパティ 'height'がタイプ 'UILabel'のオブジェクトに見つかりません。

  • 理由:ヘッダーファイルが導入されていないため UIView+KJFrame KJAlertViewの場合
  • 解決方法 ヘッダーファイルの導入
13. [KJEmitterView/Classes] xcodebuild: KJEmitterView/KJEmitterView/Classes/AlertView/KJAlertView.m:10:9: fatal error: ' UIView+KJFrame.h' file not found.

  • 理由:同じフォルダーの下にないため
  • 解決方法 このヘッダーファイルが導入されていないエラーを修正するか、導入が必要なヘッダーファイルをKJAlertViewと同じフォルダー下に配置してください。
14. 名前:specの名前は、ファイルの名前と一致させる必要があります。
  • 理由 ファイル名が同じでない
  • 解決方法 xxx.podspec ファイル名は、ファイル内の s.name ファイル名 "xxx" と一致する必要があります。
15.
unknown: Encountered an unknown error 
(Could not find a `ios` simulator 
(valid values: com.apple.coresimulator.simruntime.ios-12-2,
com.apple.coresimulator.simruntime.tvos-12-2, 
com.apple.coresimulator.simruntime.watchos-5-2). 
Ensure that Xcode -> Window -> Devices has at least one `ios` simulator listed or otherwise add one.) during validation.


  • 解決方法 CocoaPodsをアップグレードして、ターミナルで実行します。 sudo gem install cocoapods
16. [KJEmitterView/Control] xcodebuild: KJEmitterView/KJEmitterView/Control/MarqueeLabel/KJMarqueeLabel.m:23:14: warning: null passed to a callee that requires a non-null argument [-Wnonnull] (非 null 引数を必要とする着信者に null が渡されました)。
  • 理由 この警告は、ある属性がNULLではだめだと言っているのに、XX = nilとどこかに書いてしまったために、衝突が起きてしまったというものです
  • 解決策 属性を宣言する際に、__nullable(? can be null) と __nonnull(! cannot be null) を追加するか、マクロ NS_ASSUME_NONNULL_BEGIN と NS_ASSUME_NONNULL_END を使って複数のプロパティを nonnull でラップし、nullable にする必要があるものだけ変更するようにします。
17. [KJEmitterView/Classes] xcodebuild: :19:9: error: 'Method' の宣言は、モジュール 'ObjectiveC.runtime' から必要な前にインポートされなければなりません。
  • 理由:ランタイムが導入されていない
  • 解決方法 を導入する。 #import <objc/runtime.h>

######18, RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54

- ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://github.com/yangKJ/KJPlayerDemo.git /var/folders/fd/yxh686d17s3bfcz11t3_s9ch0000gn/T/d20191022-3327-1a1sjwn --template= --single-branch --depth 1 --branch 1.0.6

Cloning into '/var/folders/fd/yxh686d17s3bfcz11t3_s9ch0000gn/T/d20191022-3327-1a1sjwn'...
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.


解決策

git config http.postBuffer 524288000
git config https.postBuffer 524288000


19, ポッドトランクのプッシュアップロードでエラー、国内のCDNソースが利用できない
Updating spec repo `trunk`
[!] CDN: trunk Repo update failed - 6 error(s):
no block given
no block given


解決策



1. トランクのソースを削除する pod repo remove trunk



2. ココアポッドをアップグレードする sudo gem install cocoapods -n /usr/local/bin

20. PodインストールまたはPodアップデートの際のアップデートエラー xx
Analyzing dependencies
[!] CDN: trunk Repo update failed - 34 error(s):
no block given


解決策

21. エラー: クラス '_KJIFinishTools' のインターフェース定義が重複しています。
- ERROR | [KJEmitterView/InteriorFinish] xcodebuild: /Users/yangkejun/Library/Developer/Xcode/DerivedData/App- gpmktkjjgkmqxbewzsgsipmxwyrx/Build/Products/Release-iphonesimulator/KJEmitterView/KJEmitterView.framework/Headers/_ KJInteriorFinishTools.h:22:1: error: duplicate interface definition for class '_KJIFinishTools'


原因 _KJInteriorFinishTools.h _KJIFinishTools ファイルの競合、以前に名前を変更したため、余分なファイルが発生しました。



解決方法 そのファイルを見つけて削除してください。

22. を実行する必要があります。 pod trunk register を使用して、まずセッションを登録します。

解決策

pod trunk register email 'your name' --description='description'


23. CocoaPods は、ポッド "KJEmitterView" の互換性のあるバージョンを見つけられませんでした。
[!] CocoaPods could not find compatible versions for pod "KJEmitterView":
  In Podfile:
    KJEmitterView (~> 4.7.9)

None of your spec sources contain a spec satisfying the dependency: `KJEmitterView (~> 4.7.9)`.


解決策

Quick update: pod repo update
Update a specific library: pod update KJEmitterView