Spaceship

### 脚本操作 证书,app,provision等一些列apple develop后台操作,快速高效。

github地址

spaceship开发文档

文档有列出常用的api调用demo,包括证书,appid,provision等操作。想看更具体详细的结构文档,参考Ryby类库查询

Spaceship使用

  • 安装

    1.安装fastlane
    sudo gem install -n /usr/local/bin fastlane 2.启动spaceship(后台运行)
    fastlane spaceship 3.安装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 DevelopPortalHandle
    def initialize(appid)
    @appid = appid list = appid.split(".")
    appidLastName = list.last @appName = appidLastName
    @provisionName = appidLastName
    end def login()
    Spaceship::Portal.login("账号","密码")
    Spaceship.client.team_id = "这里输入TeamId"
    end def createApp()
    puts "createApp #{@appid} appName = #{@appName} "
    app = Spaceship::Portal.app.find(@appid)
    puts "app = #{app} class = #{app.class}"
    if !app then
    #生成appid,创建新的app
    app = Spaceship::Portal.app.create!(bundle_id: @appid, name: @appName)
    puts "createApp #{app}"
    end
    end #appstore or inHouse
    def createDistributionProvision(provisioningClass)
    cert = Spaceship::Portal.certificate.production.all.last
    provisionNameDis = @provisionName + '_dis'
    profile = provisioningClass.create!(bundle_id: @appid,certificate:cert,name:@provisionName)
    return profile
    end #appstore or inHouse
    def downloadDistributionProvision(provisioningClass)
    #查找有没有provision文件
    filtered_profiles = provisioningClass.find_by_bundle_id(bundle_id: @appid)
    profile = nil
    if 0 < filtered_profiles.length then
    profile = filtered_profiles[0]
    elsif 0 == filtered_profiles.length then
    profile = createProvision(provisioningClass)
    end #没有找到就创建,找到就下载
    provisionNameDis = @provisionName + '_dis'
    provisionFileName = provisionNameDis + '.mobileprovision'
    File.write(provisionFileName, profile.download)
    return provisionFileName
    end def createDevelopProvision()
    dev_certs = Spaceship::Portal.certificate.development.all
    all_devices = Spaceship::Portal.device.all
    provisionNameDev = @provisionName + '_dev'
    profile = Spaceship::Portal.provisioning_profile.development.create!(bundle_id: @appid,certificate: dev_certs,name: provisionNameDev,devices:all_devices)
    return profile
    end def downloadDevelopProvision()
    #查找有没有provision文件
    filtered_profiles = Spaceship::Portal.provisioning_profile.development.find_by_bundle_id(bundle_id: @appid)
    profile = nil
    if 0 < filtered_profiles.length then
    profile = filtered_profiles[0]
    elsif 0 == filtered_profiles.length then
    profile = createDevelopProvision()
    end #没有找到就创建,找到就下载
    provisionNameDev = @provisionName + '_dev'
    provisionFileName = provisionNameDev + '.mobileprovision'
    File.write(provisionFileName, profile.download)
    return provisionFileName
    end def 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-8 import getopt
    import os
    import sys
    import plistlib def provisionInstall(provisionPath,uuid):
    #将provision文件改成uuid命名,并且放入到Provisioning Profiles所在目录下
    systemProvisionPath = '~/Library/MobileDevice/Provisioning\ Profiles/%s.mobileprovision' % uuid
    dir = 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为xml transCMD = 'security cms -D -i %s > test.plist' % provisionFilePath
    os.system(transCMD) #test.plist文件路径
    dir = os.path.dirname(provisionFilePath)
    plistPath = dir + '/test.plist' #读plist文件中内容
    plist = ''
    maj, min, _, _, _ = sys.version_info
    if 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,uuid pass

Ruby类库查询

ruby查询网站

很重要,在上面的网站可以搜索关键字,比如xcodeproj,spaceship。左边就会有Class List,方法/类查询都很方便。特别实用

iOS自动化--Spaceship使用实践的更多相关文章

  1. 基于facebook-wda的iOS自动化操作实践记录

    [本文出自天外归云的博客园] 原理 对于iOS自动化操作,主要靠WebDriverAgent来完成.在Mac电脑上连接真机iPhone,运行WebDriverAgentRunner会在Mac端启动WD ...

  2. Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...

  3. 初识ios自动化(一)

    Appium进行自动化测试有两个好处: 1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用. 2. Appium支持Selenium WebDr ...

  4. Cobbler自动化部署最佳实践

    第1章 Cobbler自动化部署最佳实践 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的. 面对 ...

  5. iOS自动化环境搭建——macaca

    macaca-java for ios 自动化环境搭建 基础原理解析:https://testerhome.com/topics/6608 一.环境搭建 1.安装eclipse; -----Java开 ...

  6. 基于Armitage的MSF自动化集成攻击实践

    基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...

  7. 一招让 IOS 自动化化快的飞起

    前言 最近在做IOS自动化测试,IOS的Appium环境都配置OK,Demo脚本运行没有问题,多开执行没有问题,IOS安卓统一平台调度集成没有问题,可以进行自动化测试.课时真正执行用例时发现个严重问题 ...

  8. iOS应用开发最佳实践

    <iOS应用开发最佳实践> 基本信息 作者: 王浩    出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16 ...

  9. Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发

    Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发 直接入正题: Screen Shot 2015-09-18 at 16.56.20.png Mac上安装Jekins jekins下 ...

随机推荐

  1. C++新型强制类型转换。

    C++强制类型转换分为4个不同的类型. 1.static_cast -用作基本类型转换. -不能用于基本类型指针转换. -可以用于有继承关系对象之间的转换和类指针之间的转换. #include < ...

  2. tornado源码简单实现

    首先基本的同步流程是: class Index(tornado.web.RequestHandle): def get(self): self.write('hellow,word') app = t ...

  3. 7.jQuery之显示与隐藏效果

    这里用到三个函数方法:show()   hide()  toggle() 注意点是三个方法里面的两个参数的使用,前一个参数是时间,表示显示速度:后一个参数是回调函数,只有前面的动画执行完之后,回调函数 ...

  4. 2019.9.16 linux安装软件lamp

    2019/9/16 Linux软件安装 方式:yum/rpm/源码安装 yum安装: yum 是通过分析RPM的包头数据后,根据各软件的相关性制作出属性相对应的解决方案,然后可以自动处理软件的相依属性 ...

  5. SpringBoot02——A Simple SpringBoot Project&Hot Deployment

    1.简单的Controller映射 1.新建一个controller包,包一定在启动器的下一层级 2.可以在application.properties中进行调整端口和context-path参数 s ...

  6. python中使用schedule模块定时执行任务

    python中有一个轻量级的定时任务调度的库:schedule.他可以完成每分钟,每小时,每天,周几,特定日期的定时任务.因此十分方便我们执行一些轻量级的定时任务. 代码如下: import sche ...

  7. P5018 对称二叉树题解

    题目内容链接: 那么根据题意,上图不是对称二叉树,只有节点7的子树是: 通俗来说,对称二叉树就是已一个节点x为根的子树有穿过x点的对称轴并且对称轴两边的对称点的大小也必须相等,那么这棵树就是对称二叉树 ...

  8. Linux本机和远程服务器之间文件的上传和下载 rz sz

    tar zxvf lrzsz-0.12.20.tar.gz 解压安装包   下载地址:链接:https://pan.baidu.com/s/1KMS1QlyOhpXiYeaWdNBAyw 提取码:08 ...

  9. linux 文件查找 find命令详解

    一,从索引库查找文件:locate 索引库:操作系统会周期性的遍历根文件系统,然后生成索引库 手动更新索引库:updatedb 语法:locate [OPTION]... PATTERN... 只匹配 ...

  10. ZROI 19.07.30 简单字符串/ll

    写在前面:今天下午药丸--不会字符串,全程掉线/ll 给出字符串\(S\),\(q\)次询问,每次给出\(a,b,c,d\),询问\(S[a,b]\)的所有子串和\(S[c,d]\)最长公共前缀的最大 ...