Code-Signing and CocoaPods

I’ve appended a short update to my article on best practices for code signing on iOS. If you use CocoaPods, you’ll need the following post_install script in your host project’s Podfile, which applies the correct code signing identity for the current scheme/config to each dependency framework:

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                if config.to_s == 'Beta'
                    config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Distribution'
                elsif config.to_s == 'Release'
                    config.build_settings['CODE_SIGN_IDENTITY[sdk=iphoneos*]'] = 'iPhone Distribution'
                end
            end
    end
end

My script assumes that you are using a distribution identity for configs named Beta and/or Release, but these can edited to match your own build configs. The CocoaPods default for the Debug code-signing identity (as well as the default Automatic selection for provisioning profiles) I have left untouched since they’re best practice (in my opinion).

One unfortunate drawback of using CocoaPods is that it is not possible for the post_install script to select a specific code-signing identity by name. For example, if your project uses an enterprise code signing identity for beta builds and a standard developer identity for release builds, you would ideally want to indicate those specific identities (per my recommendations). Alas, the best you can do via the script is to choose the automatic iOS Distribution selection and pray that Xcode will choose the appropriate identity. From what I have observed so far, Xcode is doing the right thing. Let me know if your experience differs.

This script is available as a gist. Hat-tip to GitHub user @TravisCrist for how to construct the outer portions of this post_install script.

|  22 Aug 2015