2017-03-03 6 views
3

私は複数のターゲット/スキームを持つXcodeプロジェクトセットアップを持っているので、同じコードベースの下に複数のアプリケーションがあります。fastlaneを使用してスキーム/ターゲットに基づいてplistからバンドルIDを自動的に取得

私は私のアプリを一人一人のために「ため息」ツールを実行し、私のFastfileで、次の試験レーン作成:fastlaneのドキュメントを見てみると

lane :testing do 
    ["First", "Second", "Third", "Fourth"].each do |scheme_name| 
     sigh 
    end 
end 

を、私はあなたがバンドル識別子を定義することができます参照して、どの一口使用。しかし、私はそれを自動的に各ターゲット/スキームのplistから現在のバンドル識別子を取得し、それをため息のために使用する必要があります。これは達成できますか?

何かのような(擬似コード):plistのパスを取得するための方法を有するhttps://github.com/SiarheiFedartsou/fastlane-plugin-versioning

bundle_id = get_bundle_id_from_plist 
sigh(app_identifier: bundle_id) 

私はこのプラグインを使用してみました。私は、このコードを実行しました:

bundle_id = get_info_plist_value(path: get_info_plist_path(target: scheme_name), key: 'CFBundleIdentifier') 
puts bundle_id 

出力は$(PRODUCT_BUNDLE_IDENTIFIER)で、実際にはplistの値にどのようなので、私は近づいています。しかし、実際のバンドルIDを指す変数だけでなく、これを返す必要があります。

私が一息を使いたい理由は、それぞれのアプリケーション/ターゲットに独自のプロビジョニングプロファイルがあり、CarPlay資格のために手動で最初に生成しなければならなかったからです。ターゲットが期限切れになると、ターゲットごとに新しいプロビジョニングプロファイルを自動的に作成したいと思っています。

答えて

5

私は、このような機能を提供する任意のfastlane行為を知っていませんが、一例としてcode that updates an info plist using the scheme nameを使用してCFBundleIdentifierを提供する、fastlane pluginをローカルfastlane actionを構築し、または作成して共有することができるかもしれません。

このコードではxcodeproj Ruby gemを使用して、SchemeからInfo.plistファイルを取得します。次に、plist値を変更してplistファイルを保存します。あなたはplcからCFBundleIdentifierを返す以外は同様のことができます。

プラグインを作成したくない場合は、今週はこのプラグインを作成することができます。

私はプラグインが終了し得るまでこのコードは、あなたのために働く必要があります。詳細について

# At the top of your Fastfile; you may need to add "gem 'xcodeproj'" to your Gemfile and then do a bundle install 
    require 'xcodeproj' 

    def product_bundle_id(scheme) 
     project = Xcodeproj::Project.open('path/to/your/xcodeproj') 
     scheme = project.native_targets.find { |target| target.name == scheme } 
     build_configuration = scheme.build_configurations.first 
     build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] 
    end 

    lane :testing do 
     ["First", "Second", "Third", "Fourth"].each do |scheme_name| 
     sigh(app_identifier: product_bundle_id(scheme_name)) 
     end 
    end 
+0

感謝を。私の更新された答えを見てください。値を返すことはできましたが、実際のバンドルIDの代わりに$(PRODUCT_BUNDLE_IDENTIFIER)が返されました。 – codeman

+0

それは働いた!ありがとうございました! – codeman

+1

あなたは大歓迎です!私はプラグインをリリースしました。インストールするには、コマンドラインから 'fastlane add_plugin get_product_bundle_id'を実行してください。 docsについてはhttps://github.com/fastlane/fastlane/blob/master/fastlane/docs/Plugins.mdをご覧ください。 'get_product_bundle_id(project_filepath:project_path、scheme: 'スキーム名')' –

関連する問題