iOS自动化--Spaceship使用实践
Spaceship
### 脚本操作 证书,app,provision等一些列apple develop后台操作,快速高效。 github地址
spaceship开发文档
文档有列出常用的api调用demo,包括证书,appid,provision等操作。想看更具体详细的结构文档,参考Ryby类库查询 Spaceship使用
安装
1.安装fastlanesudo gem install -n /usr/local/bin fastlane2.启动spaceship(后台运行)fastlane spaceship3.安装pry(虚拟环境 类似于irb,python等环境)sudo gem install -n /usr/local/bin pry
登录二次验证
1.执行 fastlane Spaceship 2.一堆输出完了,让你输入账号密码,以及二次验证码。 3.进入到pry环境输入demo脚本 注意: 操作完成之后,会在本地生成一个session保存,网上说会保存一个月,暂时没验证。也就是一个月内登录不需要再二次验证了。
pry环境测试脚本
开发文档有很多demo了,见上面开发文档链接,直接在pry环境中可进行测试实操脚本编写
我们的目标是 生成appid,provision,并且自动安装。
1.创建app,添加app权限,创建provision,下载provision。
require "spaceship"class DevelopPortalHandledef initialize(appid)@appid = appidlist = appid.split(".")appidLastName = list.last@appName = appidLastName@provisionName = appidLastNameenddef login()Spaceship::Portal.login("账号","密码")Spaceship.client.team_id = "这里输入TeamId"enddef createApp()puts "createApp #{@appid} appName = #{@appName} "app = Spaceship::Portal.app.find(@appid)puts "app = #{app} class = #{app.class}"if !app then#生成appid,创建新的appapp = Spaceship::Portal.app.create!(bundle_id: @appid, name: @appName)puts "createApp #{app}"endend#appstore or inHousedef createDistributionProvision(provisioningClass)cert = Spaceship::Portal.certificate.production.all.lastprovisionNameDis = @provisionName + '_dis'profile = provisioningClass.create!(bundle_id: @appid,certificate:cert,name:@provisionName)return profileend#appstore or inHousedef downloadDistributionProvision(provisioningClass)#查找有没有provision文件filtered_profiles = provisioningClass.find_by_bundle_id(bundle_id: @appid)profile = nilif 0 < filtered_profiles.length thenprofile = filtered_profiles[0]elsif 0 == filtered_profiles.length thenprofile = createProvision(provisioningClass)end#没有找到就创建,找到就下载provisionNameDis = @provisionName + '_dis'provisionFileName = provisionNameDis + '.mobileprovision'File.write(provisionFileName, profile.download)return provisionFileNameenddef createDevelopProvision()dev_certs = Spaceship::Portal.certificate.development.allall_devices = Spaceship::Portal.device.allprovisionNameDev = @provisionName + '_dev'profile = Spaceship::Portal.provisioning_profile.development.create!(bundle_id: @appid,certificate: dev_certs,name: provisionNameDev,devices:all_devices)return profileenddef downloadDevelopProvision()#查找有没有provision文件filtered_profiles = Spaceship::Portal.provisioning_profile.development.find_by_bundle_id(bundle_id: @appid)profile = nilif 0 < filtered_profiles.length thenprofile = filtered_profiles[0]elsif 0 == filtered_profiles.length thenprofile = createDevelopProvision()end#没有找到就创建,找到就下载provisionNameDev = @provisionName + '_dev'provisionFileName = provisionNameDev + '.mobileprovision'File.write(provisionFileName, profile.download)return provisionFileNameenddef addServices(appServiceObj)app = Spaceship::Portal.app.find(@appid)app.update_service(appServiceObj)end end#创建、下载develop的provision文件appid = ARGV[0]handle = DevelopPortalHandle.new(appid)handle.login()handle.createApp()handle.addServices(Spaceship::Portal.app_service.push_notification.on)handle.addServices(Spaceship::Portal.app_service.vpn_configuration.on)provisionPath = handle.downloadDevelopProvision()2.安装provision文件
这部分代码我使用py写的,原理先说一下,安装provison文件实际上就是, 1.把profile文件名称改成本身的内容中的uuid作为名称,uuid.mobileprovision 2.把文件移动到~/Library/MobileDevice/Provisioning\ Profiles目录下以下是我python写的代码。#!/usr/bin/env python #coding:utf-8import getopt import os import sys import plistlibdef provisionInstall(provisionPath,uuid):#将provision文件改成uuid命名,并且放入到Provisioning Profiles所在目录下systemProvisionPath = '~/Library/MobileDevice/Provisioning\ Profiles/%s.mobileprovision' % uuiddir = os.path.dirname(provisionPath)uuidProvision = '%s/%s.mobileprovision' % (dir,uuid)cpCMD = 'cp -a %s %s' % (provisionPath,uuidProvision)cpUUIDProvision = 'cp -a %s %s' % (uuidProvision,systemProvisionPath)os.system(cpCMD)os.system(cpUUIDProvision)pass#读provision文件,获取teamName和uuid def readProvision(provisionFilePath):#返回teamName 和 UUID#转换provision为xmltransCMD = 'security cms -D -i %s > test.plist' % provisionFilePathos.system(transCMD)#test.plist文件路径dir = os.path.dirname(provisionFilePath)plistPath = dir + '/test.plist'#读plist文件中内容plist = ''maj, min, _, _, _ = sys.version_infoif maj < 3:plist = plistlib.readPlist(plistPath)else:with open(plistPath,'rb') as fp:plist = plistlib.load(fp,fmt=None, use_builtin_types=False)teamNeme = plist['TeamName']uuid = plist['UUID']return teamNeme,uuidpass
Ruby类库查询
ruby查询网站
很重要,在上面的网站可以搜索关键字,比如xcodeproj,spaceship。左边就会有Class List,方法/类查询都很方便。特别实用
转载于:https://www.cnblogs.com/xiongwj0910/p/11541103.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
