Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Fastlaneʵս£¨¶þ£©£ºActionºÍPlugin»úÖÆ
 
×÷Õß ÐÏÌìÓî  À´Ô´£ºInfOQ ·¢²¼ÓÚ£º 2016-12-14
  1893  次浏览      27
 

×÷Ϊ¼Ü¹¹Ê¦µÄÎÒÃdz£³£ÒªÃæÁÙµÄÒ»¸öÄÑÌâ¾ÍÊǼ¼ÊõÑ¡ÐÍ¡£ÏÖÔÚÎÞÂÛÊÇÉÌÒµÏîĿҲºÃ£¬¿ªÔ´ÏîĿҲºÃ£¬¿É¹©Ñ¡ÔñµÄ·½°¸ÊµÔÚÊÇÌ«¶à£¬ÆäÖÐÓÅÐãµÄ·½°¸Ò²ÊDzã³ö²»ÇÕâ¾ÍÒªÇóÎÒÃÇÔÚ×ö¼¼ÊõÑ¡Ð͵Äʱºò£¬ÐèÒª´Ó¶à¸öά¶È½øÐп¼Á¿£¬ÆäÖÐÁ¼ºÃµÄÀ©Õ¹ÐÔÊÇÎÒÃÇÖØµã¿¼Á¿µÄ¶ÔÏó¡£

ÈκÎÒ»¸öÓÅÐãµÄ¿ò¼Ü»òƽ̨¶¼Ó¦¸Ã¾ßÓÐÁ¼ºÃµÄÀ©Õ¹ÐÔ£¬ÒÔÂú×ã²»¶Ï±ä»¯µÄÒµÎñ³¡¾°ºÍ¸öÐÔ»¯ÒªÇ󣬶øÕâÖÖÀ©Õ¹ÐÔµÄÆäÖÐÒ»¸ö·½ÃæÔòÌåÏÖÔÚ£ºÊÇ·ñÄܹ»ÌṩһÖÖ»úÖÆ£¬ÕâÖÖ»úÖÆ¼ÈÄÜÂú×ã¶þ´Î¿ª·¢µÄ±ã½ÝÐÔ£¬ÓÖ×îС»¯ÉõÖÁ²»»á¶ÔÔ­ÓеÄϵͳ²úÉúÈκεÄÇÖÈë»òÆÆ»µ¡£

Õ¾ÔÚÕâ¸ö½Ç¶ÈÉÏ£¬½ñÌìÎÒÃǾÍÀ´½éÉÜÒ»ÏÂFastlaneµÄÁ½ÖÖÀ©Õ¹»úÖÆ£¬ActionºÍPlugin¡£

FastlaneµÄAction»úÖÆ

Fastlane±¾Éí°üº¬Á½´óÄ£¿é£¬Ò»¸öÊÇÆäÄں˲¿·Ö£¬ÁíÍâÒ»¸ö¾ÍÊÇActionÁË¡£ActionÊÇFastlane×Ô¶¯»¯Á÷³ÌÖеÄ×îСִÐе¥Ôª£¬Ö±¹ÛÉÏÀ´½²¾ÍÊÇFastfile½Å±¾ÖеÄÒ»¸ö¸öÃüÁ±ÈÈ磺git_pull£¬deliver£¬pod_installµÈµÈ£¬¶øÕâЩÃüÁî±³ºó¶¼¶ÔÓ¦Ò»¸öÓÃRuby±àдµÄ½Å±¾¡£

ÎÒ²ÂÏ룬FastlaneµÄ×÷ÕßÃÇÔÚÏîÄ¿µÄÔçÆÚÉõÖÁ¹æ»®µÄ½×¶Î£¬Ó¦¸Ã¾Í¿¼Âǵ½ÁËÕâÒ»µã£ºÔÚÒÆ¶¯¿ª·¢ÖУ¬×Ô¶¯»¯µÄÒµÎñ³¡¾°Ì«¶à£¬Ã¿¸öÍŶӶ¼ÓÐ×Ô¼ºµÄÌØÊâÒªÇ󣬵¥¿¿Ò»Á½¸öÈ˵ÄÁ¦Á¿ÊÇÎÞ·¨Âú×ãµÄ£¬ËùÒÔÈçºÎ½«Éæ¼°µ½Êµ¼ÊÒµÎñµÄ¹¦ÄÜ¿ª·¢£¬ÓÃÓÅÑŵķ½Ê½½»¸ø¿ªÔ´ÉçÇøÖÐÅӴ󹤳ÌʦÃÇÀ´Î¬»¤£¬³ÉΪFastlane¼Ü¹¹ÖÐÐèÒªÖØµã¿¼ÂǵÄÄÚÈÝ¡£

ÓÚÊǾ­¹ý²»¶ÏµÄ̽Ë÷£¬ÌÖÂÛºÍʵ¼ù£¬ActionÕâÖÖÀ©Õ¹»úÖÆÓ¦Ô˶øÉú¡£ÎÒÃÇ¿ÉÒÔÀí½âΪFastlane½¨Á¢ÁËÒ»Ì×ÍêÕûµÄ¹æÔò£¬Õâ¸ö¹æÔòÊÇÈç´ËµÄ¼òµ¥Ò×ÐУ¬ÎÞÂÛÊǹٷ½µÄ¹¤³Ìʦ»¹ÊÇ¿ªÔ´ÉçÇøµÄ¹¤³ÌʦÃÇ£¬´ó¼Ò¶¼ÔÚÕâ¸ö¹æÔòÀï½øÐÐÓÎÏ·£¬ÕâÑù²»µ«½µµÍÁËÀ©Õ¹µÄÃż÷£¬ÎüÒý¹¤³ÌʦÃÇÀ´ÍêÉÆFastlane±¾Éí£»Í¬Ê±ÓÖÔöÇ¿ÁËÔ¼Êø£¬¼õÉÙ²»±ØÒªµÄ¹µÍ¨ºÍ´úÂë¼ì²é³É±¾¡£ËùÒÔÎÒÃÇ¿ÉÒÔ¿´µ½ÎÞÂÛÊǹٷ½¹±Ï׵쬻¹ÊÇGithubÉçÇø¹±Ï×µÄActionÃÇ£¬ÎÞÒ»ÀýÍâ¶¼Á¥ÊôÓÚActionÀ©Õ¹µÄÒ»²¿·Ö¡£

µ½Ä¿Ç°ÎªÖ¹Fastlane°üº¬´óÔ¼170¶à¸öAction£¬´óÔ¼·ÖΪÈçϼ¸Àࣺ

1.ºÍÒÆ¶¯¶Ë³ÖÐø½»¸¶Ïà¹ØµÄ15¸öºËÐĵŤ¾ßÁ´£ºÈ磺deliver£¨ÉÏ´«ipa£¬½ØÆÁºÍmetaÐÅÏ¢µ½ITC£©£¬supply£¨ÉÏ´«apk£¬½ØÆÁºÍmetaÐÅÏ¢µ½Google Play£©£¬sigh£¨iOS ProvisioningÎļþ¹ÜÀí£©µÈµÈ£¬ÏêÇéÈçÏ£º

https://github.com/fastlane/fastlane#fastlane-toolchain

2.ºÍiOSÏà¹ØµÄ£¬È磺ipa£¬xcode_installµÈµÈ

3.ºÍAndroidÏà¹ØµÄ£¬È磺gradle£¬adbµÈµÈ

4.ºÍ°æ±¾¿ØÖÆÏà¹ØµÄ£¬Èçgit_pull£¬hg_pushµÈµÈ

5.ºÍiOSÒÀÀµ¿â¹ÜÀíÏà¹ØµÄ£¬È磺cocoapods£¬carthageµÈµÈ

6.µÚÈý·½Æ½Ì¨¶Ô½ÓÏà¹ØµÄ£¬È磺hipchat£¬jira£¬twitter£¬slackµÈµÈ

ÕâЩActionµÄÏêÇéºÍʹÓ÷½·¨¿ÉÒԲ鿴Õâ¸öÁ´½Ó£º https://docs.fastlane.tools/actions/Actions/

Ó¦¸Ã˵¼¸ºõº­¸ÇÁËËùÓг£¼ûµÄ³¡¾°£¬µ«ÊÇÈç¹ûÈÔÈ»ÎÞ·¨ÍêÈ«Âú×ãÄãµÄÒªÇóµÄ»°£¬¾ÍµÃ×Ô¼ºÀ´¶¯ÊÖ×Ô¶¨ÒåÒ»¸öÁË¡£

³¡¾°·ÖÎö

ÄÇôÈçºÎÀ´×Ô¶¨ÒåÒ»¸öActionÄØ£¿°´ÕÕϰ¹ß£¬ÎªÁ˱ãÓÚ´ó¼ÒÀí½â£¬ÎÒÃÇ»¹ÊÇÏÈ´ÓÒ»¸öÒµÎñ³¡¾°ÈëÊÖ¡£ÔÚÉÏһƪÎÄÕÂÖУ¬ÎÒÔø¾­¾Ù¹ýÒ»¸öÀý×Ó£ºË½ÓÐPodµÄ·¢²¼£¬Æä²½ÖèÈçÏ£º

1.Ôö¼ÓPodspecÖеİ汾ºÅ

2.Ö´ÐÐpod lib lintÃüÁî½øÐпâÑéÖ¤

3.Git Commit´úÂë

4.Git Push´úÂëµ½Ô¶¶Ë

5.´òÒ»¸öGit Tag

6.½«Tag Pushµ½Ô¶¶Ë

7.Ö´ÐÐpod repo pushÃüÁî·¢²¼¿âµ½Ë½Óвֿâ È»ºó¶ÔÓ¦ÒÔÉϵö²½Ö裬ÎÒÃǶ¼¿ÉÒÔÕÒµ½ÏֳɵÄActionÀ´ÊµÏÖ£¬ËùÒÔÎÒÃÇ¿ÉÒÔÔÚFastfileÖÐÔö¼ÓÈçÏÂLane£º

desc "Release new private pod version"
lane :do_release_lib do |options|
target_version = options[:version]
project = options[:project]
path = "#{project}.podspec"

git_pull
ensure_git_branch # È·ÈÏ master ·ÖÖ§
pod_install
pod_lib_lint(verbose: true, allow_warnings: true, sources:
SOURCES, use_bundle_exec: true, fail_fast: true)
version_bump_podspec(path: path, version_number: target_version) # ¸üРpodspec
git_commit_all(message: "Bump version to #{target_version}") # Ìá½»°æ±¾ºÅÐÞ¸Ä
add_git_tag(tag: target_version) # ÉèÖÃ tag
push_to_git_remote # ÍÆË͵½ git ²Ö¿â
pod_push(path: path, repo: "GMSpecs", allow_warnings: true, sources: SOURCES) # Ìá½»µ½Ë½Óвֿâ
end

×Ô¶¨ÒåAction

½²µ½ÕâÀ´ó¼Ò¿ÉÄÜ»áÎÊ£¬Õâ²»¶¼Ð´ÍêÁËÂð£¬ÄÄÀﻹÐèÒª×Ô¶¨ÒåAction°¡£¿±ð¼±£¬Æäʵ´óÔ¼3¸öÔÂǰ£¬±ÊÕß±àдÕâ¸öFastfileµÄʱºò£¬FastlaneÕýºÃȱÉÙÒ»¸öActionÄܹ»Ö§³ÖCocoapodsµÄÕâ¸öÃüÁ¼´£º

pod lib lint

Õâ¸öÃüÁîÊÇÓÃÀ´Ñé֤˽ÓеÄPod¿âÊÇ·ñÕýÈ·£¬ËùÒÔµ±Ê±ÎÞÄÎ֮ϣ¬Ö»ÄÜ×Ô¼º¶¯ÊÖдһ¸öÁË¡£Ð´Íêºó·¢ÏÖ£¬Õâ¸ö¹¤×÷Ò²²¢Ã»ÓÐÏëÏóÖеÄÄÇôÀ§ÄÑ£¬FastlaneÒѾ­ÎªÎÒÃÇÌṩÁËÏֳɵÄÄ£°å£¬¼´Ê¹Äã¶ÔRubyµÄÓï·¨²»ÊìϤ£¬Ò²Ã»ÓйØÏµ£¬FastlaneÊÇ¿ªÔ´µÄÂ¿ÉÒÔÖ±½ÓÏÂÔØÔ´Âë¿´¿´±ðÈ˵ÄActionÊÇÔõôдµÄ¾ÍÖªµÀÁË£¬ÎÒÃÇ¿ÉÒÔÔÚÕâ¸öĿ¼ÏÂÕÒµ½ËùÓеÄActionÎļþ£º

fastlane/fastlane/lib/fastlane/actions/

×Ô¶¨ÒåActionµÄÁ÷³Ì´óÔ¼ÈçÏ£¬Ê×ÏÈ£¬ÎÒÃÇÔÚÖÕ¶ËÖÐÖ´ÐÐÃüÁî

fastlane new_action

È»ºó¸ù¾ÝÌáʾ£¬ÔÚÃüÁîÐÐÖÐÇÃÈëactionµÄÃû×Öpod_lib_lint£¬È»ºóFastlane»áÔÚµ±Ç°Ä¿Â¼µÄactionsÎļþ¼ÐÖаïÎÒÃÇ´´½¨ÁËÒ»¸öpod_lib_lint.rbµÄRubyÎļþ£¬ÄÚÈÝ´óÖÂÈçÏ£¨Ê¡ÂÔÁË·ÇÖØµã²¿·Ö£©£º

module Fastlane
module Actions
class PodLibLintAction < Action
def self.run(params)
UI.message "Parameter API Token: #{params[:api_token]}"
end
......

def self.available_options
[
FastlaneCore::ConfigItem.new(key: :api_token,
env_name: "FL_POD_LIB_LINT_API_TOKEN", # The name of the environment variable
description: "API Token for PodLibLintAction", # a short description of this parameter
verify_block: proc do |value|
UI.user_error!("No API token for PodLibLintAction given,
pass using `api_token: 'token'`") unless (value and not value.empty?)
end),
......
]
end
end
end

´ó¼Ò¿ÉÒÔ¿´µ½£¬×Ô¶¨ÒåµÄAction¶¼ÊÇÁ¥ÊôÓÚFastlane/ActionsÕâ¸ömodule£¬²¢ÇҼ̳Ð×ÔActionÕâ¸ö¸¸Àà¡£ËäȻģ°åÖеÄÄÚÈÝ»¹Í¦¶à£¬²»¹ý²»Óõ£ÐÄ£¬´ó²¿·ÖÄÚÈݶ¼ÊÇһЩ¼òµ¥µÄÎı¾ÃèÊö£¬¶ÔÓÚÎÒÃÇÀ´ËµÖ»ÐèÒªÖØµã¹Ø×¢ÕâÁ½¸ö·½·¨¾ÍÐУº

1.self.run·½·¨£ºÕâÀï·ÅÖõÄÊÇʵ¼ÊµÄÒµÎñ´¦Àí´úÂë¡£

2.self.available_options·½·¨£ºÕâÀïÉùÃ÷ÐèÒª¶ÔÍⱩ¶³öµÄ²ÎÊý£¬Ã»ÓÐÉùÃ÷µÄ²ÎÊýÔÚÖ´Ðйý³ÌÖÐÎÞ·¨Ê¹Óá£

ÔÚ¿ªÊ¼±àдʵ¼ÊµÄÒµÎñ´úÂë֮ǰ£¬ÎÒÃÇÐèÒªÁ˽âÇå³þÕâ¸öAction¾ßÌå°üº¬µÄÒµÎñÂß¼­£¬ËùÒÔÎÒÃÇÊ×ÏÈÀ´·ÖÎöÒ»ÏÂCocoapodsµÄpod lib lintÃüÁÔÚÖÕ¶ËÖ´ÐÐ

pod lib lint --help

ÖÕ¶Ë´òÓ¡³ö£¨Ö»±£ÁôÖØµã²¿·Ö£©

Usage:

$ pod lib lint

Validates the Pod using the files in the working directory.

Options:

--quick Lint skips checks that would
require to download and build
the spec
--allow-warnings Lint validates even if warnings
......

¿ÉÒÔ¿´³öÕâ¸öÃüÁî°üº¬Á˲»ÉÙÑ¡ÏOptions£©£¬¶øÎÒÃÇÐèÒª×öµÄÊǽ«ÕâЩѡÏîÓ³Éäµ½actionÖеIJÎÊý£¬ËùÒÔ½ÓÏÂÀ´ÎÒÃǸù¾ÝÑ¡ÏîµÄÀàÐÍ£¬ÔÚself.available_optionsÖнøÐÐÉùÃ÷£¬´úÂëÈçÏ£¨Ö»±£ÁôÖØµã²¿·Ö£©£º

def self.available_options
[
FastlaneCore::ConfigItem.new(key: :use_bundle_exec,
description: "Use bundle exec when there is a Gemfile presented",
is_string: false,
default_value: true),
FastlaneCore::ConfigItem.new(key: :verbose,
description: "Allow ouput detail in console",
optional: true,
is_string: false)
......
]
end

ÉùÃ÷Íê±Ïºó£¬ÔÚself.run·½·¨Öбàд×îÖÕµÄÒµÎñÂß¼­£¬Í¬Ê±½«ÉÏÃæµÄoptionsͨ¹ýparams±©Â¶³öÈ¥£¬ÕâÑùÔÚÔËÐÐpod_lib_lintÕâ¸öactionµÄʱºò£¬ÎÒÃǾͿÉÒÔ´«Èë¶ÔÓ¦µÄ²ÎÊý£¬´Ó¶øFastlane¿ÉÒÔÖ´ÐÐЯ´ø¸÷ÖÖÑ¡ÏîµÄÍêÕûÃüÁ´úÂëÈçÏ£¨Ö»±£ÁôÖØµã²¿·Ö£©£º

def self.run(params)
command = []
command << "bundle exec" if File.exist?("Gemfile") && params[:use_bundle_exec]

command << "pod lib lint"
command << "--verbose" if params[:verbose]
command << "--allow-warnings" if params[:allow_warnings]
......
result = Actions.sh(command.join(' '))
UI.success("Pod lib lint Successfully")
return result
end

´ÓÕâ¶Î´úÂë¿ÉÒÔ¿´³ö£¬¹Ø¼üµãÔÚÓÚActions.sh()Õâ¾ä»°£¬ËùÒÔÎÒÃÇÒª±£Ö¤ÕâÀïµÄsh·½·¨Ö´ÐеÄcommandºÍpod lib lintÃüÁîÔÚÖÕ¶ËÖÐÊä³öµÄÒ»Ö£¬ÀýÈ磺

pod lib lint --quick --verbose --allow-warnings --use-libraries

×îºó£¬ÎÒÃǽ«pod_lib_lint.rb¿½±´µ½iOSÏîĿϵÄfastlane/actionsÎļþ¼ÐÖУ¬È»ºóÔÚ¸ÃÏîĿĿ¼Ï£¬Ö´ÐÐÈçÏÂÃüÁî:

fastlane action pod_lib_lint

Èç¹ûûÓдíÎóµÄ»°£¬ÖÕ¶ËÖлáÊä³öÈçÏÂÄÚÈÝ£º

Æäʵ£¬×î³õдÕâ¸öAction£¬ÎÒÖ»ÊÇ´òËãÔÚÍŶÓÄÚ²¿Ê¹Ó㬲¢Ã»Óй±Ï×µ½GithubÉϵļƻ®£¬ËùÒÔֻʵÏÖÁËÒ»²¿·Ö²ÎÊý¡£ÎÒÃÇ×Ô¼ºÊ¹ÓÃÁËÒ»¶Îʱ¼ä£¬¸Ð¾õ±È½ÏÎȶ¨µÄʱºò£¬²Å½«ËùÓвÎÊý¶¼²¹Æë£¬È»ºó¹±Ï×µ½ÁËFastlaneµÄÖ÷²Ö¿âÖУ¬µØÖ·ÈçÏ£º

https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/pod_lib_lint.rb

ÕâÀï˵һ¸öÌâÍâ»°£º ¶ÔÓÚ¿ªÔ´ÏîÄ¿µÄ´úÂëÌá½»£¬Õû¸ö¹ý³Ì»á±È½ÏÑϸñ£¬³ýÁ˹¦ÄÜÎÞBug£¬µ¥Ôª²âÊÔÐèÒªÍêÈ«¸²¸ÇÖ®Í⣬¶ÔÓÚÓï·¨¸ñʽµÈÈíÖ¸±êÒ²ÓÐÒ»¶¨µÄÒªÇó¡£µ±Ìá½»pull requestµÄʱºò£¬Github»áÏÈʹÓÃ×Ô¶¯»¯¹¤¾ß£¨HoundCIºÍCircleCI£©½øÐÐÈ«ÃæµÄ¼ì²é£¬Í¨¹ýºó²Å»á½»¸øCode ReviewÍŶÓÈ˹¤Check£¬ËùÒÔÆ½³£´úÂëϰ¹ß²»ºÃµÄͬѧÐèÒª¶à¼Ó×¢Òâ¡£

FastlaneµÄPlugin»úÖÆ

ÎÒÃÇÔÚʹÓÃFastlaneµÄʱºò³£³£»áÓöµ½ÕâÑùµÄ³¡¾°£º

1.ÎÒµÄ×Ô¶¨ÒåActionÐèÒªÔÚ¶à¸öÄÚ²¿ÏîÄ¿ÖÐʹÓÃ

2.ÎÒ¾õµÃÕâ¸ö×Ô¶¨ÒåActionºÜ²»´í£¬Ïë¹²Ïí¸øÆäËûµÄÍŶÓʹÓÃ

´Ëʱ£¬¿½±´Õ³ÌùËäÈ»¿ÉÒÔ½â¾öÎÊÌ⣬µ«²¢²»ÊÇÒ»¸ö´ÏÃ÷µÄ·½°¸¡£½«Action·¢²¼µ½FastlaneµÄ¹Ù·½²Ö¿âµ¹ÊÇÒ»¸ö²»´íµÄÑ¡Ôñ£¬µ«Êǹٷ½²Ö¿â±¾Éí¶ÔActionµÄÒªÇó±È½Ï¸ß£¬²¢²»»á½ÓÊÕ·ÇͨÓÃÐÔµÄAction£¬¼´Ê¹½ÓÊÕÁË£¬Õû¸ö·¢²¼ÖÜÆÚÒ²»á±È½Ï³¤£¬¶øÇÒÒÔºóÎÞÂÛÊÇÉý¼¶»¹ÊÇBugÐÞ¸´£¬¶¼ÒÀÀµFastlane±¾ÉíµÄ·¢°æ£¬´ó´ó½µµÍÁËÁé»îÐÔ¡£

ËùÒÔ´Ó1.93¿ªÊ¼£¬FastlaneÌṩÁËÒ»ÖÖPluginµÄ»úÖÆÀ´½â¾öÕâÖÖÎÊÌâ¡£´ó¼Ò¿ÉÒÔÀí½âΪ£ºPlugin¾ÍÊÇÔÚActionµÄ»ù´¡ÉÏ×öÁËÒ»²ã°ü×°£¬Õâ¸ö°ü×°ÇÉÃîµÄÀûÓÃÁËRubyGemsÕâ¸öÏ൱³ÉÊìµÄRuby¿â¹ÜÀíϵͳ£¬ËùÒÔÆä¿ÉÒÔ¶ÀÁ¢ÓÚFastlaneÖ÷²Ö¿â½øÐвéÕÒ£¬°²×°£¬·¢²¼ºÍɾ³ý¡£

ÎÒÃÇÉõÖÁ¿ÉÒÔ¼òµ¥µÄÈÏΪ£ºPlugin¾ÍÊÇRubyGem·â×°µÄAction£¬ÎÒÃÇ¿ÉÒÔÏñ¹ÜÀíRubyGemsÒ»ÑùÀ´¹ÜÀíFastlaneµÄPlugin¡£

°²×°Plugin

µ½Ä¿Ç°ÎªÖ¹£¬´óÔ¼ÓÐ30¸öPlugin·¢²¼µ½ÁËRubyGemsÏ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÈçÏÂÃüÁîÀ´²éÕÒ£º

fastlane search_plugins [query]

¼ÙÉèÎÒÃǵÄÏîÄ¿ÖÐÐèҪʹÓÃÒ»¸öÃû½Ðversion_from_last_tag£¬ÓÃÓÚ»ñÈ¡gitµÄ×î½üÒ»¸ötag£¬ÄÇôÎÒÃÇÔÚÖն˵ÄÏîĿĿ¼ÏÂÖ´ÐУº

fastlane add_plugin version_from_last_tag

Ìí¼ÓÍê³Éºó£¬ÏîÄ¿Öлá¶à³öÒ»¸öGemfile£¬Gemfile.lock£¬fastlane/PluginfileÈý¸öÎļþ£¬ÆäÖÐÕâ¸öPluginfileʵ¼ÊÉϾÍÊÇÒ»¸öGemfile£¬ÀïÃæ°üº¬¶ÔÓÚPluginµÄÒýÓ㬸ñʽÈçÏ£º

# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!

gem 'fastlane-plugin-version_from_last_tag'

¶øPluginfile±¾ÉíÓÖ±»GemfileÒýÓã¬ËùÒÔÓÖÓ¡Ö¤ÉÏÉÏÎÄÖеÄÄǾ仰£º¶ÔPluginµÄ¹ÜÀíÆäʵ¾ÍÊǶÔRubyGemµÄ¹ÜÀí¡£

´ËºóµÄPluginÊÇʵ¼ÊÓ÷¨ºÍʹÓÃActionÊÇÒ»Öµģ¬ËùÒԾͲ»ÔÚ´Ë׸ÊöÁË¡£

·¢²¼Plugin

Èç¹ûÄãÏë·¢²¼Ò»¸öPlugin£¬¿ÉÒÔÑ¡ÔñÖ±½Ó×÷Ϊһ¸öGem·¢²¼µ½RubyGemsÉÏ£¬ÕâÑù´ó¼Ò¾Í¿ÉÒÔͨ¹ýsearch_pluginsÃüÁîËÑË÷µ½ÁË£»Ò²¿ÉÒÔÑ¡ÔñÖ»Ìá½»´úÂëµ½GithubÉÏ£¬È»ºóÌṩһ¸ögithubµÄµØÖ·¸øÆäËüÏîÄ¿»òÍŶÓʹÓã¬ÕâʱÐèÒªÔÚPluginfileÖÐÕâÑùÉùÃ÷£º

gem "fastlane-plugin-version_from_last_tag", git: "https://github.com/jeeftor/fastlane-plugin-version_from_last_tag"

·¢²¼Ö®Ç°£¬ÎªÁ˱¾µØµ÷ÊÔ·½±ã£¬¿ÉÒÔ½«gemÖ¸Ïò±¾µØ£¬ÔÚPluginfileÕâÑùÉùÃ÷£º

gem "fastlane-plugin-version_from_last_tag", path: "../fastlane-plugin-version_from_last_tag"

ÓÐÁËPluginÖ®ºó£¬FastlaneµÄ¸üÐÂÆµÂÊ´ó´ó½µµÍ£¬Ö÷²Ö¿âÉÏActionµÄÊýÁ¿½«Î¬³ÖÔÚĿǰµÄˮƽÉÏ£¬È¡¶ø´úÖ®µÄÊÇPluginµÄ²»¶ÏÔö¶à¡£ÆóÒµºÍÍŶӿÉÒÔÑ¡ÔñÊʺÏ×Ô¼ºµÄPlugin£¬Ò²¿ÉÒÔËæÊ±ËæµØ·¢²¼Plugin¸ø±ðµÄÍŶÓʹÓá£

½áÓï

ÓÐÁËAction£¬FastlaneµÄ¿ÉÀ©Õ¹ÐÔ´ó´óµÄÔöÇ¿£¬ÎÒÃÇ¿ÉÒԷdz£·½±ãµÄ±àдÊʺÏ×Ô¼ºÒµÎñ³¡¾°µÄ¹¤¾ß£»PluginµÄ³öÏÖ£¬ÓÖÔÚÀ©Õ¹ÐԵĻù´¡Ö®ÉÏ´ó´óÔöÇ¿ÁËÆäÁé»îÐÔ£¬Á½Õß½áºÏÔÚÒ»ÆðʹÓÿÉÒÔ½«FastlaneµÄÓÅÊÆ³ä·ÖµÄµÄ·¢»Ó³öÀ´¡£

ͨ³£Çé¿öÏ£¬Èç¹ûÒ»¸ö¹¤¾ßÖ»´òËãÔÚÒ»¸öÏîÄ¿ÖÐʹÓã¬ÄÇô½¨ÒéÖ±½ÓÓÃAction£¬±Ï¾¹Ò»¸öRuby½Å±¾¾ÍÄܽâ¾ö£¬³É±¾±È½ÏµÍ£»Èç¹û´òËãÔÚ¶à¸öÏîÄ¿ÖÐÉõÖÁ¿çÍŶÓʹÓã¬ÄÇôÔò½¨ÒéʹÓÃPlugin¡£

   
1893 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ