こんにちは、ビルド職人です。去年の今頃、このような記事を書きました。
CocoaPods 1.0にしたらこの現象が再発してしまいました。
=== BUILD TARGET DZNEmptyDataSet OF PROJECT Pods WITH CONFIGURATION Release ===
Check dependencies Code Sign error: Provisioning profile does not match bundle identifier: The provisioning profile specified in your build settings (“XXXXXXXX Ad Hoc”) has an AppID of “jp.ch3cooh.*” which does not match your bundle identifier “org.cocoapods.DZNEmptyDataSet”.
延々と悩んでいたのですが、ようやく対応できそうなので要点をまとめておきます。
CocoaPods 1.0以前にはpod install時に生成されるInfo.plistのBundle ID部分(CFBundleIdentifier)がorg.cocoapods.hogehoge
になっていました。なので以前書いた記事の通りBundle IDをアプリ書き換えでうまく動いていました。
しかし、CocoaPods 1.0になって生成されるInfo.plistのBundle ID部分が下記のように変わったようです。
<key>CFBundleIdentifier</key> <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
このためBundle IDの書き換えがうまくいかなかったようです。Xcode 7から導入された仕組みなのですがそれ以前に作成されたプロジェクトの場合にはフォローが必要なようです。
アプリのプロジェクト側でPRODUCT_BUNDLE_IDENTIFIER
が指定されていない場合には、Info.plistと同じフォルダに入っているhogehoge.xcconfig
の中にデフォルトの値が設定されています。
DZNEmptyDataSetの一例ですが下記のような感じです。
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/DZNEmptyDataSet GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_LDFLAGS = -framework "UIKit" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES
解決しました
以上のことを踏まえてPodfileを修正しました。
post_install do |installer| # change bundle id of each pod to '${BUNDLE_ID}.*' bundle_id = 'jp.ch3cooh' # for xcconfig directory = installer.config.project_pods_root + 'Target Support Files/' Dir.foreach(directory) do |path| full_path = directory + path if File.directory?(full_path) Dir.foreach(full_path) do |path2| if path2.end_with?(".xcconfig") xcconfig_path = full_path + path2 if File.exist?(xcconfig_path) puts xcconfig_path text = File.read(xcconfig_path) new_contents = text.gsub('org.cocoapods', bundle_id) File.open(xcconfig_path, "w") {|file| file.puts new_contents } end end end end end # for project.pbxproj installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_id + '.\${PRODUCT_NAME:rfc1034identifier}' end end end
これでorg.cocoapods.hogehoge
になっている部分をjp.ch3cooh.hogehgoe
に書き換えることができました。
ここまでやってる人は他にはいないと思うので、正しい対処方法を模索すべきなんだろうけどよくわからない。