Измените «Источник значков приложения» в «Target> General» (не Info.plist), используя (Fastlane-) скрипт - PullRequest
0 голосов
/ 21 марта 2019

Я только начал использовать Fastlane для автоматического развертывания наших приложений для iOS.У нас есть несколько белых ярлыков (одно и то же приложение, разные стили, контент, значки и т. Д.).

Используя Fastlane, я могу изменить почти все настройки перед началом сборки (номер версии и сборки, файл экрана запуска и т. Д.).

Где я борюсь, это значок приложенияИсточник.Мы используем наборы изображений (один AppIcon-NAME.appiconset на приложение).См. Изображение ниже для ссылки, где оно установлено: enter image description here

Как мне изменить это свойство с помощью Fastlane, любого другого пользовательского сценария или на этапе сборки?Похоже, это изменения в xcodeproj.pbxproj, а не Info.plist, что значительно затрудняет поиск.

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Я предполагаю, что вы используете gym для создания приложения, верно?

Вы можете использовать параметр xcargs и передать путь к файлу .appiconset с помощью клавиши ASSETCATALOG_COMPILER_APPICON_NAME.

gym(
  xcargs: "ASSETCATALOG_COMPILER_APPICON_NAME=./path/to/your/icon/file"
)

Вы можете найти документацию по gym здесь , к сожалению, официальной документации по настройке ASSETCATALOG_COMPILER_APPICON_NAME нет.

0 голосов
/ 09 июня 2019

Для меня я сделал специальное действие с именем update_appicon.rb.

# coding: utf-8
module Fastlane
  module Actions
    class UpdateAppicon < Action
      def self.run(params)
        require 'plist'
        require 'xcodeproj'

        info_plist_key = 'INFOPLIST_FILE'
        appicon_name = 'ASSETCATALOG_COMPILER_APPICON_NAME'

        # Load .xcodeproj
        project_path = params[:xcodeproj]
        project = Xcodeproj::Project.open(project_path)

        # Fetch the build configuration objects
        configs = project.objects.select { |obj| obj.isa == 'XCBuildConfiguration'}
        UI.user_error!("Not found XCBuildConfiguration from xcodeproj") unless configs.count > 0

        configs = configs.select { |obj| obj.build_settings[info_plist_key] == params[:plist_path] }
        UI.user_error!("Xcodeproj doesn't have configuration with info plist #{params[:plist_path]}.") unless configs.count > 0

        # For each of the build configurations, set app identifier
        configs.each do |c|
          c.build_settings[appicon_name] = params[:appicon_name]
        end

        # Write changes to the file
        project.save

        UI.success("Updated #{params[:xcodeproj]} ?.")
      end

      #####################################################
      # @!group Documentation
      #####################################################

      def self.is_supported?(platform)
        [:ios].include?(platform)
      end

      def self.description
        "Update the project's bundle identifier"
      end

      def self.details
        "Update an app identifier by either setting `ASSETCATALOG_COMPILER_APPICON_NAME`."
      end

      def self.available_options
        [
          FastlaneCore::ConfigItem.new(key: :xcodeproj,
                                       env_name: "FL_UPDATE_APPICON_PROJECT_PATH",
                                       description: "Path to your Xcode project",
                                       default_value: Dir['*.xcodeproj'].first,
                                       verify_block: proc do |value|
                                         UI.user_error!("Please pass the path to the project, not the workspace") unless value.end_with?(".xcodeproj")
                                         UI.user_error!("Could not find Xcode project") unless File.exist?(value)
                                       end),
          FastlaneCore::ConfigItem.new(key: :plist_path,
                                       env_name: "FL_UPDATE_APPICON_PLIST_PATH",
                                       description: "Path to info plist, relative to your Xcode project",
                                       verify_block: proc do |value|
                                         UI.user_error!("Invalid plist file") unless value[-6..-1].casecmp(".plist").zero?
                                       end),
          FastlaneCore::ConfigItem.new(key: :appicon_name,
                                       env_name: 'FL_APPICON_ID',
                                       description: 'appicon name')
        ]
      end

      def self.authors
        ['ruman']
      end

      def self.category
        :project
      end
    end
  end

И оно применимо к fastfile

update_appicon(
    xcodeproj: "YourProjectName.xcodeproj",
    plist_path: "Info.plist",
    appicon_name: "AppIcon#{options[:app_icon]}"
)

Надеюсь, оно вам поможет!

...