ios 打包_ios h5 打包ios 并上架 - CSDN
  • 感谢大神分享。其中使用iTunes的方式已经无法使用。 推荐使用最后一种方式生成ipa1.通过xcode来打包 ...当我们打包生成的不是ipa,而是.app文件时,应该如何拿到其中的ipa呢,下面有三种方式2.1通过iTunes(过时

    写在前面,内容大致转载自 http://www.cnblogs.com/wengzilin/p/4601684.html
    感谢大神分享。其中使用iTunes的方式已经无法使用。
    推荐使用最后一种方式生成ipa

    1.通过xcode来打包
    这是最原始的方式。具体的百度一下就有了


    2.当我们打包生成的不是ipa,而是.app文件时,应该如何拿到其中的ipa呢,下面有三种方式

    2.1通过iTunes(过时,或者说不能用了)
    这种方法就是打开iTunes 找到应用的选项,然后将.app文件直接拖进去,然后就可以再iTunes中找到对应的应用,然后右键查看包内容就能找到对应的ipa了。正如开头所说买这种方式已经不能使用了。原因是 iTunes的【应用】选项已经被删除了。不过在可以使用的时候 还是很方便的


    2.2通过脚本来实现【不出错还好,一旦有语法错误或者其他错误出现就不好处理】
    可以参考 http://www.51testing.com/html/04/344504-822334.html


    2.3解压改后缀名(本文推荐)
    这种方式是在xcode编译产生出.app包的基础上进行进一步处理,通过简单的压缩以及该后缀名即可实现ipa发包。

    这种方式下又可通过脚本自动处理以及手动处理两种途径实现,推荐脚本方法,一劳永逸。

    2.3.1 脚本自动生成ipa包

    Step1: 新建文件夹,命名为“distribute”,新建distribute.sh脚本文件,内容为:(注意,脚本中所有appName请先替换成你的真正app名称)

    复制代码
    rm -rf appName
    mkdir appName
    mkdir appName/Payload
    cp -r appName.app appName/Payload/appName.app
    cp Icon.png appName/iTunesArtwork
    cd appName
    zip -r appName.ipa Payload iTunesArtwork

    exit 0
    复制代码

    Step2: 将要转化的.app文件放到distribute/文件夹下

    这时的文件夹目录结构是这样的:(注意,脚本中所有appName请先替换成你的真正app名称)

    distribute/distribute.sh
    distribute/appName.app

    Step3: 运行distribute.sh脚本

    打开Terminal,cd到distribute文件夹下,把distribute.sh拉到terminal中执行。如果提示permission denied,则用“chmod 777 distribute.sh”命令赋予权限后,再执行一次distribute.sh。

    Step4: 大约若干秒后,会在distribute/文件夹下生成appName/文件夹,里面的appName.ipa就是我们想要的包。

    2.3.2 手动压缩改后缀方式

    这种方式与4.1的方法本质是一样的。

    Step1: 新建“Payload”文件夹,注意名字要一字不差;

    Step2: 将你的.app包放到Payload中,注意app的名字不做任何更改,就用xcode生成的app名称;

    Step3: 在Payload文件夹上右键压缩成zip,然后将生成的.zip文件后缀改成.ipa即可

    展开全文
  • 最近有小伙伴问我如何打成ipa包分发给测试人员 , 虽然现在网上的教程很多,但是也很杂, 没有一个比较完整的讲解. 利用工作之余, 就说一下如何生成ipa包?共分为两种方法. 第一种方法:  1) 至于配置发布证书和AdHoc...

           最近有小伙伴问我如何打成ipa包分发给测试人员 , 虽然现在网上的教程很多,但是也很杂, 没有一个比较完整的讲解. 利用工作之余, 就说一下如何生成ipa包?共分为两种方法.

    第一种方法:

        1) 至于配置发布证书和AdHoc描述文件, 就不再累述, 下载下来双击安装即可.(ps: 生成AdHoc描述文件的时候要注意勾选所有的设备, 只有被描述文件包含的设备才能进行相应的测试. 如果是企业账号的话则不需要添加设备的udid).

        2) 接下来开始配置xCode里的工作(包括发布证书和描述文件), 注意图中被红色圈圈标记的部分.  命名可以自定义, 一般命名为AdHoc.





         3)  接下来选择 TARGETS 进行设置 , 如下图: (ps: Debug 和 Release里暂时不要改动)




         4) 选择 Product - Scheme - EditScheme 或者直接按快捷键 command+shift+逗号, 会出现以下界面, 设置为AdHoc. 设置完成后,点击右下角'Close'即可.




         5) Xcode连上手机选择真机, 选择 Product - Archive (模拟器下此项不可选) ,再弹出的界面中,选择 Export -> Save for Ad Hoc Deloyment -> next  , 如下图:




        6) 接着选择你的开发团队:



         7)  最后Export导出到桌面之后就是一个ipa的文件, 发给你的小伙伴拖到iTunes里之后就可以在手机上运行喽.




    第二种方法:

    前三步同第一种方法.

        4) 设置 Run -> Build Configuration -> AdHoc. (ps: Archive就不需要设置了)

        5) 编译一下 , if -> Build Success  -> Show in Finder之后,将文件夹里的app直接拖入到iTunes里, 接着再iTunes里选中app -> Show in Finder -> 导入到桌面就是一个 ipa包.

     


     



    展开全文
  • 最详细iOS打包流程

    2019-04-28 16:12:24
    引言 关于开发证书配置(Certificates & Identifiers & Provisioning ...对于一个iOS开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详、疑问、疑惑甚至困惑: 什么是...

    原文地址::https://www.jianshu.com/p/cda386ddaa2c

     

     

    引言

    关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS开发的同学没少被折腾。对于一个iOS开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详、疑问、疑惑甚至困惑:

    什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?

    什么是证书(Certificate)?如何申请?有啥用?

    什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?

    什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?

    什么是(Team)Provisioning Profiles?有啥用?

    Xcode如何配置才能使用iOS真机进行开发调试?

    多台机器如何共享开发者账号或证书?

    遇到证书配置问题怎么办?

    Xcode 7免证书调试真机调试

    本文将围绕相关概念做个系统的梳理串烧。

    从 Xcode 7 开始支持普通 Apple 账号进行免证书真机调试,详情参考最新官方文档《Launching Your App on Devices》,或参考本文最后一节简介。

    写在前面

    1.假设你使用过Apple设备(iMac/iPad/iPhone)且注册过Apple ID(Apple Account)。

    2.假设你或你所在的开发组已加入苹果开发者计划(Enroll in iOS Developer Program to become amember),即已注册开发者账号(Apple Developer Account)。

    只有拥有开发者账号,才可以申请开发/发布证书及相关配置授权文件,进而在iOS真机上开发调试Apps或发布到App Store。

    开发者账号分为Individual和Company/Organization两种类型。如无特别交代,下文基于$99/Year的普通个人开发者(Individual)账号展开。

    3.若要真机调试实践,你必须至少拥有一台装有Mac OS X/Xcode的Mac开发机(iMac or MacBook),其上自带原生的Keychain Access。

    .App ID(bundle identifier)

    App ID即Product ID,用于标识一个或者一组App。

    App ID应该和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。

    App ID字符串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过255个ASCII字符。

    App ID全名会被追加Application Identifier Prefix(一般为TeamID.),分为两类:

    Explicit App ID:唯一的App ID,用于唯一标识一个应用程序。例如“com.apple.garageband”这个App ID,用于标识Bundle Identifier为“com.apple.garageband”的App。

    Wildcard App ID:含有通配符的App ID,用于标识一组应用程序。例如“*”(实际上是Application Identifier Prefix)表示所有应用程序;而“com.apple.*”可以表示Bundle Identifier以“com.apple.”开头(苹果公司)的所有应用程序。

    用户可在Developer MemberCenter网站上注册(Register)或删除(Delete)已注册的App IDs。

    App ID被配置到【XcodeTarget|Info|Bundle Identifier】下;对于Wildcard App ID,只要bundle identifier包含其作为Prefix/Seed即可。

    .设备(Device)

    Device就是运行iOS系统用于开发调试App的设备。每台Apple设备使用UDID来唯一标识。

    iOS设备连接Mac后,可通过iTunes->Summary或者Xcode->Window->Devices获取iPhone的UDID(identifier)。

    Apple Member Center网站个人账号下的Devices中包含了注册过的所有可用于开发和测试的设备,普通个人开发账号每年累计最多只能注册100个设备。

    Apps signed by you or your team run only on designated development devices.

    Apps run only on the test devices you specify.

    用户可在网站上注册或启用/禁用(Enable/Disable)已注册的Device。

    本文的Devices是指连接到Xcode被授权用于开发测试的iOS设备(iPhone/iPad)。

    .开发证书(Certificates)

    1.证书的概念

    证书是由公证处或认证机关开具的证明资格或权力的证件,它是表明(或帮助断定)事理的一个凭证。证件或凭证的尾部通常会烙印公章

    每个中国人一生可能需要70多个证件,含15种身份证明。证件中“必需的”有30到40个。将这些证件按时间顺序铺开,那就是一个天朝子民的一生——持准生证许可落地,以户籍证明入籍,以身份证认证身份,持结婚证以合法同居,最终以死亡证明注销。

    2.数字证书的概念

    数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构——CA机构,又称为证书授权中心(Certificate Authority)发行的,人们可以在网上用它来识别对方的身份。

    数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。

    数字证书还有一个重要的特征就是时效性:只在特定的时间段内有效。

    数字证书中的公开密钥(公钥)相当于公章。

    某一认证领域内的根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。

    为了防止GFW进行中间人攻击(MitM),例如篡改github证书,导致无法访问github网站等问题,可选择不信任CNNIC

    在[钥匙串-系统]中双击CNNIC ROOT,在【信任】|【使用此证书时】下拉选择【永不信任】。

    在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。

    3.iOS(开发)证书

    iOS证书是用来证明iOS App内容(executable code)的合法性和完整性的数字证书。对于想安装到真机或发布到AppStore的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证App内容是完整、未经篡改的。

    iOS证书分为两类:Development和Production(Distribution)。

    Development证书用来开发和调试应用程序:Adevelopment certificateidentifies you, as a team member, in a development provisioning profile that allows apps signed by you tolaunchon devices.

    Production主要用来分发应用程序(根据证书种类有不同作用):Adistribution certificateidentifies your team or organization in a distribution provisioning profile and allows you tosubmityour app to the store. Only a team agent or an admin can create a distribution certificate.

    普通个人开发账号最多可注册iOS Development/Distribution证书各2个,用户可在网站上删除(Revoke)已注册的Certificate。

    下文主要针对iOS App开发调试过程中的开发证书(Certificate for Development)。

    4.iOS(开发)证书的根证书

    那么,iOS开发证书是谁颁发的呢?或者说我们是从哪个CA申请到用于Xcode开发调试App的证书呢?

    iOS以及Mac OS X系统(在安装Xcode时)将自动安装AppleWWDRCA.cer这个中间证书(Intermediate Certificates),它实际上就是iOS(开发)证书的证书,即根证书(Apple Root Certificate)。

    AppleWWDRCA(Apple Root CA)类似注册管理户籍的公安机关户政管理机构,AppleWWDRCA.cer之于iOS(开发)证书则好比户籍证之于身份证。

    如果Mac Keychain Access证书助理在申请证书时尚未安装过该证书,请先下载安装(Signing requires that you have both the signing identity and the intermediate certificate installed in your keychain)。

    5.申请证书(CSR:Certificate Signing Request)

    可以在缺少证书时通过Xcode Fix Issue自动请求证书,这里通过Keychain证书助理从证书颁发机构请求证书:填写开发账号邮件和常用名称,勾选【存储到磁盘】。

    keychain将生成一个包含开发者身份信息的CSR(Certificate Signing Request)文件;同时,Keychain Access|Keys中将新增一对Public/PrivateKey Pair(Thissigning identityconsists of a public-private key pair that Apple issues)。

    private key始终保存在Mac OS的Keychain Access中,用于签名(CodeSign)对外发布的App;public key一般随证书(随Provisioning Profile,随App)散布出去,对App签名进行校验认证。用户必须保护好本地Keychain中的private key,以防伪冒。

    Keep a secure backup of your public-private key pair. If the private key is lost, you’ll have to create anentirely newidentity to sign code.

    Worse, if someone else has your private key, that person may be able toimpersonateyou.

    在Apple开发网站上传该CSR文件来添加证书(Upload CSR file to generate your certificate):

    Apple证书颁发机构WWDRCA(Apple Worldwide Developer Relations Certification Authority)将使用private key对CSR中的public key和一些身份信息进行加密签名生成数字证书(ios_development.cer)并记录在案(Apple Member Center)。

    从Apple Member Center网站下载证书到Mac上双击即可安装(当然也可在Xcode中添加开发账号自动同步证书和[生成]配置文件)。证书安装成功后,在KeychainAccess|Keys中展开创建CSR时生成的Key Pair中的私钥前面的箭头,可以查看到包含其对应公钥的证书(Your requested certificate will be the public half of the key pair.);在Keychain Access|Certificates中展开安装的证书(ios_development.cer)前面的箭头,可以看到其对应的私钥。

    Certificate被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Identity】下,下拉选择Identities from Profile "..."(一般先配置Provisioning Profile)。以下是Xcode配置示例:

    .供应配置文件(Provisioning Profiles

    1.Provisioning Profile的概念

    Provisioning Profile文件包含了上述的所有内容:证书、App ID和设备

    一个Provisioning Profile对应一个Explicit App ID或Wildcard App ID(一组相同Prefix/Seed的App IDs)。在网站上手动创建一个Provisioning Profile时,需要依次指定App ID(单选)、证书(Certificates,可多选)和设备(Devices,可多选)。用户可在网站上删除(Delete)已注册的Provisioning Profiles。

    Provisioning Profile决定Xcode用哪个证书(公钥)/私钥组合(Key Pair/Signing Identity)来签署应用程序(Signing Product),将在应用程序打包时嵌入到.ipa包里。安装应用程序时,Provisioning Profile文件被拷贝到iOS设备中,运行该iOS App的设备也通过它来认证安装的程序。

    如果要打包或者在真机上运行一个APP,一般要经历以下三步:

    首先,需要指明它的App ID,并且验证Bundle ID是否与其一致;

    其次,需要证书对应的私钥来进行签名,用于标识这个APP是合法、安全、完整的;

    然后,如果是真机调试,需要确认这台设备是否授权运行该APP。

    Provisioning Profile把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用。这样,只要在不同的情况下选择不同的Provisioning Profile文件就可以了。

    Provisioning Profile也分为Development和Distribution两类,有效期同Certificate一样。Distribution版本的ProvisioningProfile主要用于提交App Store审核,其中不指定开发测试的Devices(0,unlimited)。App ID为Wildcard App ID(*)。App Store审核通过上架后,允许所有iOS设备(Deployment Target)上安装运行该App。

    Xcode将全部供应配置文件(包括用户手动下载安装的和Xcode自动创建的Team Provisioning Profile)放在目录~/Library/MobileDevice/Provisioning Profiles下。

    2.Provisioning Profile的构成

    以下为典型供应配置文件*.mobileprovision的构成简析

    (1)Name:该mobileprovision的文件名。

    (2)UUID:该mobileprovision文件的真实文件名。

    (3)TeamName:Apple ID账号名。

    (4)TeamIdentifier:Team Identity。

    (5)AppIDName:explicit/wildcard App ID name(ApplicationIdentifierPrefix)。

    (6)ApplicationIdentifierPrefix:完整App ID的前缀(TeamIdentifier.*)。

    (7)DeveloperCertificates:包含了可以为使用该配置文件应用签名的所有证书。

    证书是基于Base64编码,符合PEM(PrivacyEnhanced Mail, RFC 1848)格式的,可使用OpenSSL来处理(opensslx509 -text -in file.pem)。

    从DeveloperCertificates提取之间的内容到文件cert.cer(cert.perm):

    -----BEGIN CERTIFICATE-----

    将之间的内容拷贝至此

    -----END CERTIFICATE-----`

    Mac下右键QuickLook查看cert.cer(cert.perm),在Keychain Access中右键Get Info查看对应证书ios_development.cer,正常情况(公私钥KeyPair配对)应吻合;Windows下没有足够信息(WWDRCA.cer),无法验证该证书。

    如果你用了一个不在这个列表中的证书进行签名,无论这个证书是否有效,这个应用都将CodeSign Fail。

    (8)Entitlements键对应的:

    keychain-access-groups:$(AppIdentifierPrefix),参见Code Signing Entitlements(*.entitlements)。

    每个应用程序都有一个可以用于安全保存一些如密码、认证等信息的keychain,一般而言自己的程序只能访问自己的keychain。通过对应用签名时的一些设置,还可以利用keychain的方式实现同一开发者签证(就是相同bundle seed)下的不同应用之间共享信息的操作。比如你有一个开发者帐户,并开发了两个不同的应用A和B,然后通过对A和B的keychain access group这个东西指定共用的访问分组,就可以实现共享此keychain中的内容。

    application-identifier:带前缀的全名,例如$(AppIdentifierPrefix)com.apple.garageband。

    com.apple.security.application-groups:App Group ID(group. com.apple),参见Code Signing Entitlements(*.entitlements)。

    com.apple.developer.team-identifier:同Team Identifier。

    (9)ProvisionedDevices:该mobileprovision授权的开发设备的UDID 。

    Provisioning Profile被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下,然后在Code Signing Identity下拉可选择Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。

    .开发组供应配置文件(Team Provisioning Profiles

    1.TeamProvisioning Profile的概念

    每个Apple开发者账号都对应一个唯一的Team ID,Xcode3.2.3预发布版本中加入了Team Provisioning Profile这项新功能。

    在Xcode中添加Apple Developer Account时,它将与Apple Member Center后台勾兑自动生成iOS Team Provisioning Profile(Managed by Xcode)。

    Team Provisioning Profile包含一个为Xcode iOS Wildcard App ID(*)生成的iOS Team Provisioning Profile:*(匹配所有应用程序),账户里所有的Development Certificates和Devices都可以使用它在这个team注册的所有设备上调试所有的应用程序(不管bundle identifier是什么)。同时,它还会为开发者自己创建的Wildcard/Explicit App IDs创建对应的iOS Team Provisioning Profile。

    2.TeamProvisioning Profile生成/更新时机

    Add an Apple ID account to Xcode

    Fix issue "No Provisioning Profiles with a valid signing identity" in Xcode

    Assign Your App to a Team in Xcode project settings of General|Identity

    Register new device on the apple development website or Xcode detected new device connected

    利用Xcode生成和管理的iOS Team Provisioning Profile来进行开发非常方便,可以不需要上网站手动生成下载Provisioning Profile。

    Team Provisioning Profile同Provisioning Profile,只不过是由Xcode自动生成的,也被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下。

    .App Group (ID)

    1.App Group的概念

    WWDC14除了发布了OS X v10.10和switf外,iOS 8.0也开始变得更加开放了。说到开放,当然要数应用扩展(App Extension)了。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他应用程序时使用该项功能,从而实现各个应用程序间的功能和资源共享。可以将扩展理解为一个轻量级(nimble and lightweight)的分身。

    扩展和其Containing App各自拥有自己的沙盒,虽然扩展以插件形式内嵌在Containing App中,但是它们是独立的二进制包,不可以互访彼此的沙盒。为了实现Containing App与扩展的数据共享,苹果在iOS 8中引入了一个新的概念——App Group,它主要用于同一Group下的APP实现数据共享,具体来说是通过以App Group ID标识的共享资源区——App GroupContainer

    App Group ID同App ID一样,一般不超过255个ASCII字符。用户可在网站上编辑Explicit App IDs的App Group Assignment;可以删除(Delete)已注册的AppGroup (ID)。

    2.App Group的配置

    Containing App与Extension的Explicit App ID必须Assign到同一App Group下才能实现数据共享,并且Containing App与Extension的App ID命名必须符合规范:

    置于同一App Group下的App IDs必须是唯一的(Explicit,not Wildcard)

    Extension App ID以Containing App ID为Prefix/Seed

    假如Garageband这个App ID为“com.apple.garageband”,则支持从语音备忘录导入到Garageband应用的插件的App ID可能形如“com.apple.garageband.extImportRecording”。

     

    App(ex)

    App Group IDProvisioning Profile

    Code Signing Identity

    (Certificate Key Pair)App ID

    (bundle identifier)Devices

    (test)

    GarageBand

    置于同一分组:

    group.com.apple(1)共用同一证书:ios_development.cer

    (2)共用证书Key Pair中的Private Key进行CodeSigncom.apple.garageband

    授权开发测试设备的UDIDs

    GarageBand扩展插件

    com.apple.garageband.extImportRecording

    关于Provisioning Profile,可以使用自己手动生成的,也可以使用Xcode自动生成的Team Provisioning Profile。

    App Group会被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Entitlements】文件(*.entitlements)的键com.apple.security.application-groups下,不影响Provisioning Profile生成流程。

    .证书与签名Certificate& Signature)

    1.Code Signing Identity

    Xcode中配置的Code Signing Identity(entitlements、certificate)必须与Provisioning Profile匹配,并且配置的Certificate必须在本机Keychain Access中存在对应Public/Private Key Pair,否则编译会报错。

    Xcode所在的Mac设备(系统)使用CA证书(WWDRCA.cer)来判断Code Signing Identity中Certificate的合法性:

    若用WWDRCA公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃AppleWWDRCA发布,即证书来源可信;

    再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。

    2.Code Signing

    每个证书(其实是公钥)对应Key Pair中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)。

    Xcode使用指定证书配套的私钥进行签名时需要授权,选择【始终允许】后,以后使用该私钥进行签名便不会再弹出授权确认窗口。

    3.Verify Code Signature with Certificate

    上面已经提到,公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到iOS设备中。

    第一步,App在Mac/iOS真机上启动时,需要对配置的bundle ID、entitlements和certificate与Provisioning Profile进行匹配校验:

    第二步,iOS/Mac真机上的ios_development.cer被AppleWWDRCA.cer中的 public key解密校验合法后,获取每个开发证书中可信任的公钥对App的可靠性和完整性进行校验。

    iOS/Mac设备(系统)使用App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:

    若用证书公钥能成功解密出App(executable code)的内容摘要(Signature),证明此App确乃认证开发者发布,即来源可信;

    再对App(executable code)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此App(executable code)未被篡改过,即内容完整。

    小结:

    基于Provisioning Profile校验了CodeSign的一致性;

    基于Certificate校验App的可靠性和完整性;

    启动时,真机的device ID(UUID)必须在Provisioning Profile的ProvisionedDevices授权之列。

    .在多台机器上共享开发账户/证书

    1.Xcode导出开发者账号(*.developerprofile)或PKCS12文件(*.p12)

    进入Xcode Preferences|Accounts:

    选中Apple IDs列表中对应Account的的Email,点击+-之后的☸|Export Accounts,可导出包含account/code signing identity/provisioning profiles信息的*.developerprofile(Exporting a Developer Profile)文件供其他机器上的Xcode开发使用(Import该Account)。

    选中右下列表中某行Account Name条目|ViewDetails,可以查看Signing Identities和Provisioning Profiles。

    选中欲导出的Signing Identity条目,点击栏底+之后的☸|Export,必须输入密码,并需授权export key "privateKey" from keychain,将导出Certificates.p12

    点击左下角的刷新按钮可从Member Center同步该账号下所有的Provisioning Profile到本地。

    选中右击列表中某个Provisioning Profile可以【Show in Finder】到[~/Library/MobileDevice/Provisioning\ Profiles]目录,其中Provisioning Profile的真实名称为$(UUID).mobileprovision,名如"2488109f-ff65-442e-9774-fd50bd6bc827.mobileprovision",其中Name中为Xcode中看到的描述性别名。

    2.Keychain Access导出PKCS12文件(*.p12)

    在Keychain Access|Certificates中选中欲导出的certificate或其下private key,右键Export或者通过菜单File|Export Items导出Certificates.p12——PKCS12 file holds theprivate keyandcertificate

    其他Mac机器上双击Certificates.p12(如有密码需输入密码)即可安装该共享证书。有了共享证书之后,在开发者网站上将欲调试的iOS设备注册到该开发者账号名下,并下载对应证书授权了iOS调试设备的Provisioning Profile文件,方可在iOS真机设备上开发调试。

    九.证书配置常见错误

    1.no such provisioning profile was found

    Xcode Target|Genera|Identity Team下提示"Your build settings specify a provisioning profile with the UUID "xxx",howerver, no such provisioning profile was found."

    Xcode Target|BuildSettings|Code Signing|当前配置的指定UDID的provisioning profile在本地不存在,此时需要更改Provisioning Profile。必要时手动去网站下载或重新生成Provisioning Profile或直接在Xcode中Fix issue予以解决(可能自动生成iOS Team ProvisioningProfile)!

    2.No identities from profile

    Build Settings|CodeSigning的Provisioning Profile中选择了本地安装的provisioning profile之后,Code Signing Identity中下拉提示No identities from profile “…”or No identities from keychain.

    Xcode配置指定UDID的provisioning profile中的DeveloperCertificates在本地KeyChain中不存在(No identities are available)或不一致(KeyPair中的Private Key丢失),此时需去网站检查ProvisioningProfile中的App ID-Certificate-Device配置是否正确。如果是别人提供的共享账号(*.developerprofile)或共享证书(*.p12),请确保导出了对应Key Pair中的Private Key。必要时也直接在Xcode中Fix issue予以解决(可能自动生成iOS Team ProvisioningProfile)。

    3.Code Signing Entitlements file do not matchprofile

    "Invalid application-identifier Entitlement" or "Code Signing Entitlements file do not match those specified in your provisioning profile.(0xE8008016)."

    (1)检查对应版本(Debug)指定的*.entitlements文件中的“Keychain Access Groups”键值是否与ProvisioningProfile中的Entitlements项相吻合(后者一般为前者的Prefix/Seed)。

    (2)也可以将Build Settings|Code Signing的Provisioning Profile中对应版本(Debug)的Entitlements置空。

    4.Xcode配置反应有时候不那么及时,可刷新、重置相关配置项开关(若有)或重启Xcode试试。

    十.Xcode7 免证书真机调试

    在 Xcode 7 中,苹果改变了自己在许可权限上的策略:

    此前 Xcode 只开放给注册开发者下载,现在 Xcode 7 改变了这种惯有的做法,无需注册开发者账号,仅使用普通的Apple ID就能下载和上手体验。

    此前开发者需每年支付99美元的费用成为注册开发者才能在 iPhone/iPad 真机上运行调试APP,苹果新的开发者计划则放宽要求,无需购买,只要你感兴趣同样可以在设备上测试app。——Developers would be able to test apps on deviceswithouta paid Apple developer account in Xcode 7.

    所谓“免证书”真机调试,并不是真的不需要证书,Xcode真机调试原有的证书配置体系仍在——All iOS, tvOS, and watchOS appsmust becode signed and provisioned to launch on a device.所以,上文啰嗦几千字还是有点用的。

    自 Xcode7 开始,原来基于付费开发者账号及自助生成证书及配置文件的繁琐过程被苹果简化,Xcode将针对任何普通账号自动为联调真机生成所需相关的证书及配置文件。当你打算向 App Store 提交发布应用,才需要付费。

    第一步:进入 Xcode Preferences|Accounts,添加自己的 Apple ID 账号。

    第二步:Build Settings|Code Signing 下的 Provisioning Profile 选择Automatic,Code Signing Identity 选择 Automatic 下的iOS Developer

    第三步:General 配置 Bundle identifier,Team 下拉选择苹果Member Center自动为你的账号生成的Personal TeamID。

    自己的账号在调试公司或其他第三方APP代码时,若填写Bundle identifier 为他人账号注册的 APP ID(例如苹果相机应用com.apple.camera),会报错:

    No provisioning profiles with a valid signing identity (i.e. certificate and private key pair) matching the bundle identifier “com.apple.camera” were found.

    即使编译通过了,可能运行时APP自身与服务器校验也可能会报签名错误,肿么办???

    Her skill:此时,可以在他人原有App ID基础上添加后缀(例如com.apple.camera.extension),配置成应用的衍生插件(相当于置于同一App Group下)就可以快乐的玩耍了。

    如果启动APP时,Xcode报错“process launch failed: Security”或iPhone报错【不受信任的开发者】,此时需要到iPhone通用配置中的描述文件(最新系统中可能叫设备管理)中,在描述文件(开发商应用)中选择对应的描述文件(你的Apple ID)点击信任验证即可。

    OK,All Done!

    参考:

    iPhone真机调试应用程序》《iOS Developer:真机测试》《Xcode5 & iOS 7 及以下版本免证书真机调试记录

    iOS Development--Certificates, Provisioning Profiles》《关于Certificate、Provisioning Profile、App ID的介绍及其关系

    数字签名和数字证书》《iOS keyChain 研究

    苹果开发者账号那些事儿》《iOS關於Provisioning Profiles這些事

    iOS Code Signing 学习笔记》《代码签名探析/Inside Code Signing

    iOS Code Signing: 解惑/iOS Code Signing: Under The Hood

    iOS行货自动打包》《解决Xcode无法生成Archive的问题》《iOS程序完成后如何生成ipa进行真机测试

    发布iOS应用程序(Application Loader)》《iOS发布遇到的一些问题

    Xcode打包ipa包》《iOS程序生成ipa进行真机测试



     

    展开全文
  • IOS 打包的痛苦经历

    2018-07-04 23:23:59
    从6月9号发现企业证书不可以用开始,到6月23号打包成功,其中经历了14天的时间,足足有两个星期那么久,这过中的打包经历,确实让我记忆犹新,一是打包不出来,二是客户又拼命的催我们:我们要用苹果手机啊,那边的...
               从6月9号发现企业证书不可以用开始,到6月23号打包成功,其中经历了14天的时间,足足有两个星期那么久,这过中的打包经历,确实让我记忆犹新,一是打包不出来,二是客户又拼命的催我们:我们要用苹果手机啊,那边的网络用不了啊,只能用苹果版本啊,怎么现在苹果不能用啊~~~~。总之自己的压力不少。下面我们来细细的分析一下这两个星期是怎么处理问题。
             从6月11号回来公司,就拿到公司申请的企业证书,一切都看起来比较顺利,从下载profile描述文件,因为之前这台电脑有安装过对应的证书,所以证书不要重新安装,接下来就produce->Archive 生产打包文件,然后在Export->Save for Enterprise Deploment 根据企业证书生产ipa文件,接下来就放到bugly上进行测试发布,满以为可以大功告成,结果,用苹果手机扫描后,点开应用出现闪退~~~~,这可怎么办呢?我在想,总地要找出错误来,当时我不知道可以查看应用的错误,后来在寻找问题之中才无意发现的(可以在Xcode 菜单:Windows->Devices,在左边选择对应的设备,可以看到对应Logs,有不同的时间,对应的手机上那个应用出现错误都一目了然,主要是要看清楚是报错)。
    为了能解决问题,我接下来我就运行在模拟器上去看对应的错误,结果一运行又报另外的错误,就是Alamofire缺少文件,具体的详细错误忘记是什么啦,这里开始怀疑是cocoapod的问题,于是我就用真机去调试,用个人的苹果账号,结果运行的时候发现的比较奇怪的问题,说是:ld: framework not found FileProvider for architecture x86_64,在网上一找说是FileProvider 是在Xcode9 才出现的新的类,但是我就奇怪我是用Xcode 7.2 去编译的,怎么会用到Xcode 9 所用的类,当时我也不知道什么原因,就按照网上给出的方式去处理,在Xcode 9 上把对应的类Copy过去到Xcode 7.2上,结果就不报错,这个是网上的解决方式:https://www.cnblogs.com/qingjoin/p/7737080.html ,后来在寻找答案的时候,发现这个问题的原因,command line tools for xcode 这个我这边的环境是默认选择了Xcode 9.0的版本,由于在cocoapod 上bugly是用c 写的,所以,需要用到command line tools去编译这个,于是就出现了缺少FileProvider 文件。
           好的,接下来用真机调试,还会出现dyld Library not loaded: @rpath/Alamofire.framework/Alamofire 错误,这个网上也有解决的方式,一开始我是采用这个方式去解决:https://blog.csdn.net/bianchengninhao/article/details/54629375 结果在两个选项中我这边都不存在这些引用,处理不了,于是我又找了其他的方式
    这个我在Emabeded Binaries加入对应的Alamofire 后,又报Alamofire 不存在对应的的文件,我真是郁闷了,为啥找不到文件了,于是我就开始怀疑是cocoapod 的问题,首先我怀疑的缘由是,现在我们要打包的项目是两年前做的项目,用的语言是swift 2.3版本,而到现在为止,swift已经升到到4.2版本了,改变挺大的,而对于cocoapod的插件也是根据swift的版本变化而变化的,所以cocoapod也是跟着swift最新的版本去,是不是现在的cocoapod已经不支持swift2.3呢?这些都在我的头脑中涌现出来,接下来我可以做的只能要升级我的代码从2.3升级到4.2了。当然我处理这个的步骤是这样的:
    1、先将cocoapod降版本,从1.2.0降到0.39.0,结果系统要求我们要在1.0.0版本才能用,但是我把cocoapod安装到1.0.0版本后,还是不能用。
    2、接下来我就怀疑是我的系统问题,因为两年前我的系统是10.10版本,还没有到10.12版本的,于是我在windows上安装了模拟机,在安装一个10.11版本的macos,结果这个足足花费我1天多的时间去安装,用起来特别慢慢,在这个系统上我的代码根本跑不起来,而且连不了真机,所以这个一天多的时间又是浪费,其实,这个时间,市场部那边的人催促我好几次,有你再不能完成打包,我就要投诉给上级领导的意思。这时我的压力来。
    3、这个时候我也没有办法了,先再一次跟领导汇报一下这个事情先,然后让我给出具体的解决方案,我当时就说要把两年前代码升级到最新版本的,需要我大概1~2个星期的时间,领导也不多说,要求我必须马上去处理。这个时候,我知道不能在拖了。要专注地解决这个问题。于是从周六开始专注去解决这个问题,其他问题我先不管。

          首先我用真机去调试,用公司的debug账号去调试,之前我还不知道可以用开发证书(P12文件)在我本机运行,这时候就报了dyld Library not loaded: @rpath/Alamofire.framework/Alamofire 于是我再去找资料,把之前找的资料都过滤掉,一步步的去查找,于是我找到这个帖子 ,发现比较合理

       

         在Build Prases ->Embedded Binaries 上加上对应的报 cocoapod 包,同时status 改成 Optional ,结果真的不报这个错误了。这个问题算是得到解决。
    接着,后面在运行在真机的时候,又出现如下的错误dyld: Library not loaded: @rpath/libswiftAVFoundation.dylib,这次的报错,网上有很多说法,主要的思路是检查证书是否有效,重新清理一下缓存,重新clear项目,这些都弄过了,还是不行。所以有时真的要加上自己允许环境去找才行,自己本地的环境是Xcode 7.2 ,使用的是cocoapod插件,上面说的很多都是Xcode 9 的版本的问题,所以不对。后面还是找到外国的帖子,指出了解决的方法,不过对于自己来说真的不知道是什么原因,具体的帖子:
    这个帖子跟我的报错是一模一样的,看到解决的方法我也奇怪,因为之前老是提示说要调用证书,输入登录的密码,所以,我就把对应的证书都设置为始终信任,这个帖子要求我们不要始终信任,要用默认的方式就可以解决问题,后面果然是这个问题。


        那究竟是什么原因,还正是不清楚,那位高手指点一下。
    这个正是折腾,好,我们来分析一下具体的原因,我觉得有几个方面:
    1、自己对IOS 的还是有点不是很熟悉,怎么用公司的账号去打包,P12是什么,如何从swift2.3升级到swift 4.2等等,这些自己都不是很熟悉。(IOS 这块还是不要丢,还是要自己写写代码)
    2、专注度不够,在deal line的最后完成时间里,自己就在周六一天全神贯注在处理这个问题,其他问题都没有去管或者减少去管,这样做的效果挺高的,就在用一天的时间把这个问题解决了。所以自己的时间安排不太妥当。对某项工作要安排在那个时间去处理,要合理规划。(上午安排这种高前度的工作)

    希望对大家有帮助!dan
    展开全文
  • iOS打包流程

    2018-07-23 14:56:52
    一、准备: ... ... 公司(Company)$99 企业(Enterprise)$299 一个已经开发完成的项目 ...安装的Xcode必须为正式版,beta版本的Xcode不能上传项目到App Store。...上传使用的 Mac 的 OS X系统必须也是正式版的,beta版本也...
  • iOS应用程序打包

    2016-04-19 17:22:19
    首先,生成打包证书 点击加号,申请打包证书 这里写的是App Store and Ad Hoc,所以打包和上传Apple Store的证书使用同一个证书。 首先生成一个打包证书,选择App Store and Ad Hoc 上传本地生成...
  • iOS打包三种方式

    2019-07-23 11:14:07
    按照下面的步骤走,就可以打包成功,我不说各种原因,只讲操作步骤: 简单粗暴!!! 首先你得有一个苹果开发者账号。要是没有,就自己申请一个。 注意:在创建app IDs 还有描述文件的时候,需要添加的是发布版本...
  • 文章目录准备证书Xcode 打包上架App 管理 准备 注册 Apple ID,https://developer.apple.com/account/ 注册 开发者账号(收费) 生成证书(开发或发布)。在开发者官网账号菜单下,点击菜单 Certificates, ...
  • iOS打包方式

    2019-05-27 14:26:42
    2、在 iOS 到处 ipa包的时候 会有三个选项 iOS App Store 准备上传App Store 或者在越狱的iOS设备上使用 Ad Hoc 在开发者账户下添加uidi的可用设备 Enterprise 针对企业级账户下 准备本地服务器分发的app ...
  • iOS最全打包IPA教程

    2018-11-24 18:00:57
    iOS最全打包IPA教程 导语 我秦汉三又开始回来写博客了,马上就会由一个中级iOS开发人员变成高级 iOS开发人员。主要是我和李汉三达成要成为行业大佬的协约,每周汇报两次,并根据汇报情况有奖惩。今天的奖励是一个大...
  • 由于我一直是做android的,在打包时以为ios打包也和android一样:用IDE(eclipse)生成一个签名证书,然后打包。事实证明ios的打包比这复杂多了。下面介绍一下我遇到的各种问题。 1.证书问题 要打包ipa首先需要设置...
  • iOS打包成 ipa包
  • iOS打包app发给测试人员测试 说明:在项目开发过程中经常需要开发人员将项目打包成ipa包后,发给测试人员进行测试。本文贴图对打包的过程简单介绍。 一、Product ->archive (注意,不能是模拟器状态,如果...
  • ios打包错误解决

    2016-03-18 20:11:32
    iOS打包是一件非常重要和常规的事情,打包过程中中避免不了,出现各种错误,下面就记录一下 1:wildcard app ids cannot be used to create in house provisioning profiles. please use an explicit App...
  • UE4 ios打包详解(一)

    2019-07-30 12:13:33
    UE4 ios打包 一、第一种申请ios证书方式(有两种申请ios证书的方式,哪个都可以,我用的是第一种Mac上申请) 1.打开开发者中心网址:https://developer.apple.com...
  • UE4 IOS 打包

    2019-04-17 20:54:56
    UE4 IOS 打包 https://www.csdn.net/gather_2f/MtjaEg4sMzIyNC1ibG9n.html
  • ios打包必须安装xcode软件,最好是6.0以上的。
  • iOS 打包上线 All object files and libraries for bitcode must be generated from…报错错误现象: 一、App的开发对bitcode的支持 现在开发的iOS应用,有一个bitcode选项,通常我们的做法是在设置内,设置bitcode...
  • 记一次IOS打包报错

    2020-06-30 09:48:49
    公司有一个两年前的项目,用户突然发现一个简单的小BUG需要改,改的简单,但是在IOS打包的时候遇到不少问题。 首先,第一个问题,也是浪费了我最多时间去解决 百度和谷歌都搜索,得到的结果都一样,都是说缺了XXX库...
  • react-native ios打包流程

    2018-12-17 17:40:52
    打包主要有两种: (1)直接用数据线打包到手机上 (2)打包成一个包 在打包之前需要公司的账号,不然打包不了,这个最好问公司做ios的。 第一种打包流程: 首先用数据线连接手机到电脑上。 (1)点击ntRNClient ...
1 2 3 4 5 ... 20
收藏数 60,221
精华内容 24,088
关键字:

ios 打包