整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          jenkins 集成 fastlane 打包 iOS

          jenkins 集成 fastlane 打包 iOS 并將打包結果推送

          用jenkins有將近三四個月了,為了支持iOS打包,網上有開源的工具集fastlane,就簡單總結一下,使用的心得和過程中遇到的坑。。。。

          一、打包

          下載fastlane,就三個命令:

          sudo gem update --system
          sudo gem install bundler
          sudo gem install fastlane
          

          可以查看一下 fastlane -v的版本,我們打包主要用到gym和上傳命令pilot,其他工具略有研究,但是未深入,還要提醒,我都是用的命令行格式,未使用官方推薦的Fastfile的方式,主要是我對ruby不夠了解,因為我也是個大菜鳥。附上打包命令。

          gym打包,需要講解的不多,DEVELOPMENT_TEAM等等解釋,可以詳細看這里https://dpogue.ca/articles/cordova-xcode8.html
          需要提醒的是 xcpretty_report_josn可以輸出oclint需要的xcpretty執行之后的內容,這里可以oclint集成到一起

          DEVELOPER_DIR="/Applications/Xcode.app" gym --workspace ${workspace_path} 
          --scheme ${scheme} --clean true 
          --configuration ${configuration} 
          --xcargs "PRODUCT_BUNDLE_IDENTIFIER='${bundle_id}' DEVELOPMENT_TEAM='${DEVELOPMENT_TEAM}' PROVISIONING_PROFILE_SPECIFIER='${PROVISIONING_PROFILE_SPECIFIER}'" 
          --export_method ${export_method} --archive_path ${archive_path} 
          --codesigning_identity "${rightDistributionSign}" --xcpretty_report_json "${json_path}" 
          --export_options ${ExoptionPlist} 
          --output_directory ${ipa_path} --output_name ${ipa_name} || exit
          

          二、集成

          講講其他遇到的坑和解決方案。
          由于主要使用fastlane中gym打包,但是這次需要注意的我們的需求是:

          • 需要分別打inhouse,adhoc,appstore的包
          • inhouse和adhoc作為內測,需要更換顯示圖標,加上內測字樣。
          • inhouse包需要上傳蒲公英(之前選擇的Fir因為部分收費要求放棄了),需要跟slack對接,并且自動推送。

          1、分別打三種包,對證書和rightProvision了解的不夠透徹?

          解決:把三種證書都從開發那里要過來,然后將自己的APPLE ID升級到開發者Admin狀態,就具有了三種證書的使用權限,然后跟開發一一對接,對每個包分別對應的證書了解并整理,打包的時候一一對應上就好。這個過程中,收獲的是對xcodebuild的method參數有更深的了解,其實inhouse,adhoce,appstore分別對應的打包方式是enterprise,ad-hoc,app-store。

          2、需要更換inhouse的圖標?

          解決:之前想通過是打包的時候指向不同的target,后來的解決方案是直接替換。

          for file in os.listdir(appIconPath):
           if ".png" in file:
           for appicon in os.listdir(replaceAppIconPath):
           if file==appicon:
           shutil.copy(replaceAppIconPath+'/'+appicon, appIconPath+'/'+file)
          
          

          但是需要注意的是像素和尺寸需要保持一致,設計同學的幫忙很必要。

          3、和slack對接

          解決:其實我覺得slack真的非常好用,因為它提供了各種整合持續集成的api,這里特別佩服我們老大對這塊內容的重視,slack和jenkins集成非常方便。
          只是網速有點不靠譜。slack api地址:https://api.slack.com/docs/message-guidelines
          附上我寫的腳本,借助slack web api推送信息到slack,并且可以取出jenkins中執行者的信息:

          #coding=utf-8
          import sys
          import time
          import requests
          import re
          from slacker import Slacker
          
          def send(job_url, job_name, starters, build_timestamp, workspace, build_cause, git_branch, change_log, text, userid):
           """執行結果推送slack,可選個人和channel"""
           api_token="xxxx"
           slack=Slacker(api_token, 100)
           data=[{
           "fallback": "Required plain-text summary of the attachment.",
           "color": "#36a64f",
           "fields": [
           {
           "title": "Job name",
           "value": job_name,
           "short": True
           },
           {
           "title": "Build Trigger",
           "value": starters,
           "short": True
           },
           {
           "title": "Build Time",
           "value": build_timestamp,
           "short": True
           },
           {
           "title": "Build Workspace",
           "value": workspace,
           "short": True
           },
           {
           "title": "Root Build Cause",
           "value": build_cause,
           "short": True
           },
           {
           "title": "GIT_BRANCH",
           "value": git_branch,
           "short": True
           },
           {
           "title": "Job url",
           "value": job_url,
           },
           {
           "title": "CHANGE_LOG",
           "value": change_log,
           }
          
           ],
           "footer": "XX公司",
           "ts": time.time()
           }
           ]
           try_times=0
           while try_times < 5:
           try:
           slack.chat.post_message(userid, text=text, attachments=data)
           return "push to slack failed"
           except Exception as e:
           time.sleep(50)
           try_times +=1
           if try_times >=5:
           raise Exception('push to slack failed')
          
          def get_content(job_url):
           """取出console log全部內容"""
           url=job_url + "consoleText/api/json"
           headers={
           "Content-Type": "application/json",
           "Accept": "application/json"
           }
           response=requests.get(url, auth=("xx", "xx"))
           assert response.status_code==requests.codes.ok
           return response.content
          
          def get_trigger(result):
           """取出構建者"""
           trigger_user=re.findall(r"Started by", result)
           trigger_other=re.findall(r"Triggered by", result)
           starters=""
           if len(trigger_user) > 0:
           starters=re.findall(r"Started by(.*)", result)[0].lstrip()
           elif len(trigger_other) > 0:
           starters=re.findall(r"Triggered by(.*)", result)[0].lstrip()
           return starters
          
          if __name__=='__main__':
           if len(sys.argv) >=2:
           job_url=sys.argv[1]
           job_name=sys.argv[2]
           build_timestamp=sys.argv[3]
           workspace=sys.argv[4] 
           build_cause=sys.argv[5]
           git_branch=sys.argv[6]
           text=sys.argv[7]
           userid=sys.argv[8]
           change_log=sys.argv[9]
           result=get_content(job_url)
           starters=get_trigger(result)
           result=get_content(job_url)
           starters=get_trigger(result)
           send_userid=["#xx", userid]
           for i in send_userid:
           send(job_url, job_name, starters, build_timestamp, workspace, build_cause, git_branch, change_log, text, i)
          

          然后構造請求,發送即可,詳細不表。

          4、因為我們app兩個平臺用的xcode版本不一致,需要升級到xcode8,需要將自動管理改為手動管理證書。

          sed -i '' 's/ProvisioningStyle=Automatic;/ProvisioningStyle=Manual;/g' 
          "$project_path/project.pbxproj"
          

          5、pod install總是出現問題,分析可能是因為網絡或者本機pod安裝有問題。

          若是pod問題,可以通過升級gem解決。

          sudo gem update --system
          sudo gem install -n /usr/local/bin cocoapods
          

          最后

          我知道我寫的可能并不好,排版可能也不漂亮,但是是我們已經落地在用的工程,后續再加上持續集成jenkins中遇到的問題,請大家輕拍。謝謝。
          再附上我們推送的截圖。

          .5 給圖像視圖添加圓角效果 [原創iOS開發-Xcode教程]

          1. 雙擊打開之前創建的空白項目。

          2. 本節課將為您演示,如何給一張矩形圖片,添加圓角的效果。首先在一個空白項目中,打開視圖控制器的代碼文件。

          3. 接著開始編寫代碼,實現這項功能。

          4. 首先從項目中,讀取一張之前添加的圖片文件。

          5. 初始化一個圖像視圖對象,用來顯示讀取的圖片。

          6. 初始化一個原點在(10, 80),寬度和高度都是300的矩形常量,作為圖像視圖的顯示區域。

          7. 設置圖像視圖的顯示區域。

          8. 接著設置圖像視圖層的圓角半徑大小,使其半徑大小等于圖像視圖寬度的一半。

          9. 繼續設置圖像視圖層的遮罩覆蓋屬性,進行邊界裁切。

          10. 將圖像視圖對象,添加到當前視圖控制器的根視圖。點擊[編譯并運行]按鈕,打開模擬器預覽效果。

          11. 從彈出的模擬器中可以看出,您已經給圖像視圖添加了圓角效果。最后點擊[停止]按鈕,關閉模擬器,并結束本節課程。

          每天幾分鐘,手把手帶你輕松學會iOS開發

          本文整理自:《互動教程 for Xcode9

          & Swift4》APP, 非特殊說明,本文版權歸原作者所有。

          原文:http://coolketang.com/staticCoding/5a990dd8d50eee2ea302a1ef.html

          文章標簽: ios開發

          個人分類: iOS移動開發

          所屬專欄: iOS開發從入門到精通

          上一篇2.4 給圖像視圖添加邊框效果 [原創iOS開發-Xcode教程] 下一篇2.6 給圖像視圖添加陰影效果 [原創iOS開發-Xcode教程]

          code13正式版已經更新,這是Mac平臺上一款專業的開發工具,Xcode 13 for Mac添加了強大的新團隊開發功能,非常適合與Xcode云以及GitHub、Bitbucket和GitLab協作功能,你還能在Xcode中直接發起、審查、評論和合并拉取請求,這次的xcode mac版功能更加完善,歡迎各位來體驗哦!

          Xcode 13 for Mac官方介紹

          Xcode 包含開發人員為 Mac、iPhone、iPad、Apple TV 和 Apple Watch 創建出色應用程序所需的一切。Xcode 為開發人員提供了統一的用戶界面設計、編碼、測試和調試工作流程。Xcode IDE 與 Swift 編程語言相結合,使開發應用程序變得簡單而有趣。

          https://mac.orsoon.com/Mac/187182.html

          xcode13正式版功能特點

          Xcode 包括 Xcode IDE、Swift 和 C/C++/Objective-C 編譯器、Instruments 分析工具、模擬器、最新的 SDK 以及數百個強大的功能:

          創新工具可幫助您創建出色的應用程序

          ? Swift 是一種直觀的編程語言,安全、快速且現代

          ? SwiftUI 是一個革命性的框架,可使用聲明式 Swift 語法創建用戶界面

          ? Playgrounds 是一種試驗 Swift 代碼并與之交互的有趣方式

          ? 視圖調試顯示運行時所有應用程序 UI 視圖層的 3D 堆棧

          ? 以幾乎無限的方式拆分編輯器、顯示預覽或選擇助手查看相關內容

          ? 實時問題會在您鍵入時顯示錯誤,而 Fix-its 只需單擊一下即可改進您的代碼

          ? 源代碼控制導航器和服務集成可幫助您跨團隊管理代碼

          SwiftUI 和 Interface Builder 使設計界面變得容易

          ? SwiftUI 使用聲明式 Swift 代碼來清楚地描述您的界面

          ? 設計畫布使用控件和修改器庫以圖形方式構建 UI 視圖

          ? 以不同的屏幕尺寸、方向和字體大小預覽 SwiftUI 代碼或 UIKit 界面

          ? SwiftUI 代碼始終與圖形設計畫布和預覽完美同步

          ? 動畫是使用簡單的命令構建的,這些命令描述了您想看到的動作

          專業的編輯器和調試器使您的代碼保持在前端和中心

          ? 重構使修改 Swift、Objective-C、C 和 C++ 代碼的結構變得容易

          ? 打開快速立即打開您項目中的任何文件

          ? 數據提示和快速查看可以通過在調試時將鼠標懸停在代碼上來檢查變量

          性能分析儀器

          ? 隨著時間的推移,將 CPU、磁盤、內存和 GPU 性能作為圖形軌跡進行比較

          ? 確定性能瓶頸,然后深入代碼以找出原因

          ? 直接分析您的應用程序,或以很少的開銷對整個系統進行采樣

          ? 創建具有獨特可視化效果的自定義工具來分析您自己的代碼和框架


          主站蜘蛛池模板: 久久久久人妻精品一区蜜桃| 亚洲熟女乱综合一区二区| 无码丰满熟妇浪潮一区二区AV | 国偷自产Av一区二区三区吞精| 老熟女高潮一区二区三区| 国产在线观看一区精品| 日本精品一区二区三本中文| 国产一区二区三区精品视频| 日韩视频在线观看一区二区| 日韩在线观看一区二区三区| 亚洲男女一区二区三区| 亚洲一区二区中文| 久久综合九九亚洲一区| 国产一区二区三精品久久久无广告| 国产成人久久一区二区三区| 色综合视频一区中文字幕| 精品不卡一区二区| 国产福利一区二区三区在线观看| 国产在线精品一区二区在线观看| 国产成人久久精品麻豆一区| 无码毛片一区二区三区中文字幕| 精品一区二区三区无码视频 | 久久99精品波多结衣一区| 亚洲色婷婷一区二区三区| 精品视频一区二区三区免费| 中文字幕一区二区三区在线不卡 | 91久久精一区二区三区大全| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品一区二区三区四区| 久久一本一区二区三区| 91香蕉福利一区二区三区| 国产日本一区二区三区| 久久久国产精品无码一区二区三区| 亚洲精品国产suv一区88| 国产成人欧美一区二区三区| 立川理惠在线播放一区| 日本一区二区三区高清| 少妇无码一区二区三区| 久久久久人妻精品一区三寸| 日本强伦姧人妻一区二区| 国产亚洲一区二区精品|