[Cocoapods]PodfileとPodspecテクニック
13469 ワード
Podfile Podfileはrubyファイルであるため、rubyの関連コンピテンシー を使用することができる. podコマンドはgemモジュール です.
podダウンロードのコードライブラリは Podfile具体例
また、公式には
pod installの場合、ローカルのpodspecファイルをロードしてpodspecを生成する.jsonファイルはPods/LOcal Podspecディレクトリの下にあるので、
プロジェクトの必要性のため、独立したモジュールをstatic libraryにしてnode_に配置します.modulesの下ではnpmが管理するため、このstatic library依存podspecモジュールもルートディレクトリの下に存在せず、pod install時にnode_modulesの下でコピーし、
Dop.podspec
$ gem list|grep cocoapods
cocoapods (1.5.3)
cocoapods-core (1.5.3)
cocoapods-deintegrate (1.0.2)
cocoapods-downloader (1.2.1)
cocoapods-packager (1.5.0)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
cocoapods-trunk (1.3.0)
cocoapods-try (1.1.0)
podダウンロードのコードライブラリは
~/.cocoapods/
にインストールされていますsource 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
install! 'cocoapods', :deterministic_uuids => false
# , podspec
# Cocoapods , source_files Pods , Pods 。 。
system("cp -rf ../node_modules/react-native-dop/ios/Dop.podspec .")
target 'myapp' do
pod 'SDVersion'
#
pod 'Dop', :path => "."
end
また、公式には
pre_install
、post_install
を定義して前処理を行い、target/endの外に置くことに注意してください.そうしないと、予想に達しません.system(‘echo‘hello,world’)デバッグコードを追加してコンパイルプロセスと実行順序を確認することができます.pod installの場合、ローカルのpodspecファイルをロードしてpodspecを生成する.jsonファイルはPods/LOcal Podspecディレクトリの下にあるので、
pod 'Dop', :path => "."
解析の場合、このDop.podspecファイルにはルートディレクトリの下が必要です.そうしないと、コンパイルエラーが発生します.ファイルを別の場所からコピーする必要がある場合は、ルートディレクトリの下に事前にコピーする必要があります.プロジェクトの必要性のため、独立したモジュールをstatic libraryにしてnode_に配置します.modulesの下ではnpmが管理するため、このstatic library依存podspecモジュールもルートディレクトリの下に存在せず、pod install時にnode_modulesの下でコピーし、
post_install
でコードを汚染しないように削除します.Dop.podspec
Pod::Spec.new do |s|
s.name = "Dop"
s.version = "0.1.1"
s.license = "Apache License, Version 2.0"
s.authors = { 'gRPC contributors' => '[email protected]' }
s.homepage = "https://grpc.io/"
s.summary = "grpc service"
#s.source = { :git => 'https://github.com/grpc/grpc.git' }
s.source = { :git => 'https://github.com/sebyddd/SDVersion.git' }
s.ios.deployment_target = "7.1"
s.osx.deployment_target = "10.9"
# Base directory where the .proto files are.
src = "../node_modules/react-native-dop/proto"
# Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0"
# Pods directory corresponding to this app's Podfile, relative to the location of this podspec.
pods_root = 'Pods'
# Path where Cocoapods downloads protoc and the gRPC plugin.
protoc_dir = "#{pods_root}/!ProtoCompiler"
protoc = "#{protoc_dir}/protoc"
plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin"
# Directory where the generated files will be placed.
dir = "#{pods_root}/#{s.name}"
# ,
s.prepare_command = <<-CMD
# Pods/Dop
mkdir -p #{dir}
# protoc proto , Objective-C (.m/.h)
#{protoc} \
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=#{dir} \
--grpc_out=#{dir} \
-I #{src}/public \
-I #{protoc_dir} \
#{src}/**/*.proto
CMD
# Pod , subspec Messages Group
# Files generated by protoc
s.subspec "Messages" do |ms|
ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"
ms.header_mappings_dir = dir
ms.requires_arc = false
# The generated files depend on the protobuf runtime.
ms.dependency "Protobuf"
end
# Files generated by the gRPC plugin
s.subspec "Services" do |ss|
ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"
ss.header_mappings_dir = dir
ss.requires_arc = true
# The generated files depend on the gRPC runtime, and on the files generated by protoc.
ss.dependency "gRPC-ProtoRPC"
ss.dependency "#{s.name}/Messages"
end
s.pod_target_xcconfig = {
# This is needed by all pods that depend on Protobuf:
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',
# This is needed by all pods that depend on gRPC-RxLibrary:
'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
}
end