こんにちは、ビルド職人です。去年の今頃、このような記事を書きました。
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に書き換えることができました。
ここまでやってる人は他にはいないと思うので、正しい対処方法を模索すべきなんだろうけどよくわからない。