使用 (Fastlane-) 脚本在 "Target > General"(不是 Info.plist)中更改 "App Icon Source"
Change "App Icon Source" in "Target > General" (not Info.plist) using (Fastlane-)script
我刚开始使用 Fastlane 来自动部署我们的 iOS 应用程序。我们有一些白色标签(相同的应用程序,不同的样式、内容、图标等)。
使用 Fastlane,我可以在开始构建之前更改几乎所有设置(版本和构建编号、启动屏幕文件等)。
我苦苦挣扎的地方是应用程序图标源。我们使用图像集(每个应用一个 AppIcon-NAME.appiconset
)。请参阅下图以供参考设置位置:
我将如何使用 Fastlane、任何其他自定义脚本或在构建阶段更改此 属性?这似乎是 xcodeproj.pbxproj
而不是 Info.plist
的变化,这使得它更难找到。
谢谢。
我假设您正在使用 gym
构建应用程序,对吗?
您可以使用 xcargs
参数并使用 ASSETCATALOG_COMPILER_APPICON_NAME
键将路径传递到您的 .appiconset
文件。
gym(
xcargs: "ASSETCATALOG_COMPILER_APPICON_NAME=./path/to/your/icon/file"
)
您可以找到 gym
here 的文档,遗憾的是 ASSETCATALOG_COMPILER_APPICON_NAME
构建设置没有官方文档。
对我来说,我做了一个名为 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]}"
)
希望对您有所帮助!
我刚开始使用 Fastlane 来自动部署我们的 iOS 应用程序。我们有一些白色标签(相同的应用程序,不同的样式、内容、图标等)。
使用 Fastlane,我可以在开始构建之前更改几乎所有设置(版本和构建编号、启动屏幕文件等)。
我苦苦挣扎的地方是应用程序图标源。我们使用图像集(每个应用一个 AppIcon-NAME.appiconset
)。请参阅下图以供参考设置位置:
我将如何使用 Fastlane、任何其他自定义脚本或在构建阶段更改此 属性?这似乎是 xcodeproj.pbxproj
而不是 Info.plist
的变化,这使得它更难找到。
谢谢。
我假设您正在使用 gym
构建应用程序,对吗?
您可以使用 xcargs
参数并使用 ASSETCATALOG_COMPILER_APPICON_NAME
键将路径传递到您的 .appiconset
文件。
gym(
xcargs: "ASSETCATALOG_COMPILER_APPICON_NAME=./path/to/your/icon/file"
)
您可以找到 gym
here 的文档,遗憾的是 ASSETCATALOG_COMPILER_APPICON_NAME
构建设置没有官方文档。
对我来说,我做了一个名为 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]}"
)
希望对您有所帮助!