iOS In House方式发布

这两天In House签名的时候,提示SSL证书过期了。又折腾了一把iOS In House方式发布。这里开一篇文章记录一下过去折腾In House的经过,未来再修改也更新在这里。

最早在12年的时候,我们写了一个重签名的shell脚本

IPA="xxx.ipa"
APPNAME="xxx.app"
PROVISION="embedded.mobileprovision"
CERTIFICATE="xxx" #must be in keychain, such as"iPhone Distribution: Tencent Co.,Ltd"

rm -rf Payload
rm -rf resigned.ipa

unzip -q "$IPA"

# remove the signature
rm -rf Payload/*.app/_CodeSignature Payload/*.app/CodeResources

# replace the provision
rm -rf Payload/*.app/embedded.mobileprovision
cp "$PROVISION" Payload/$APPNAME/embedded.mobileprovision

# sign with the new certificate
/usr/bin/codesign -f -s "$CERTIFICATE" --resource-rules Payload/*.app/ResourceRules.plist --entitlements game.plist Payload/*.app

# zip it back up
zip -qr resigned.ipa Payload
rm -rf Payload

中间随着iOS版本升级和XCode升级,间或小修改细节。每次XCode升级,必须下载安装对应的command line tools

iOS 7.1更新之后,苹果做了一个大的调整,通过Safari安装的时候,会提示“无法安装应用程序 因为证书无效”。stackoverflow上看到必须把plist放到https服务器上,最简单的就是丢到dropbox之类的云存储上,但是国内访问可能会受限制。我就在我们内网服务器(apache)上自己生成了一下ssl证书,让服务器支持https访问,下面是详细步骤。

1. 加载ssl动态库;打开conf/httpd.conf,去掉LoadModule ssl_module modules/mod_ssl.so前的注释即可;

2. 配置ssl;打开httpd-ssl.conf,我的配置示例如下:

SSLSessionCache "shmcb:logs/ssl.scache(512000)"
Listen 442 #端口,为了防止端口冲突,我改成了442
<VirtualHost _default_:442>
    # General setup for the virtual host
    DocumentRoot "D:/programs/xampp-win32-1.8.1-VC9/htdocs"#服务器根目录
    ServerName 192.168.1.221#服务器名,必须是ip地址或域名
    ServerAdmin [email protected]#这个是邮箱地址,可以随意填
    ErrorLog "logs/error.log"
    <IfModule log_config_module>
        CustomLog "logs/access.log" combined
    </IfModule>
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"#之后生成的证书的路径
    SSLCertificateKeyFile "conf/ssl.key/server.key"#之后生成的密钥的路径
</VirtualHost>

3. 打开cmd,到.../apache/bin目录,运行以下命令生成服务器的私钥

openssl genrsa -out server.key 1024

4. 生成签署申请,Common Name必须是服务器ip或域名,其余都可以为空

openssl req -new -out server.csr -key server.key -config ..\conf\httpd-ssl.cnf

5. 生成CA私钥

openssl genrsa -out ca.key 1024

6. 生成CA证书,Common Name必须是服务器ip或域名,其余都可以为空;为免过期,有效期我设为了10年

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config ..\conf\httpd-ssl.cnf

7. 在当前目录创建目录demoCA,在里面创建1. 空目录newcerts,2. 空文件index.txt, 3,文件serial,用文本编辑器打开,填01;

8. 用CA为服务器签署证书

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf

9. 将server.crt复制到目录conf/ssl.crt/,将server.key复制到目录conf/ssl.key/。

10. 重启apache,然后可以在浏览器输入https://localhost:442测试。

11. 修改html文件中的plist链接

itms-services://?action=download-manifest&url=https://192.168.1.221:442/down/dev/xxx.plist

然后,应该就可以在手机浏览器上在线安装了。

update 2014.12.24

中间有一段时间我没有做过In House发布,此间我的Mac升级到了10.10,Xcode升级到了6.1.1。前天签名的时候提示“--resource-rules has been deprecated in max os x >= 10.10”,签完名放到服务器上,在线安装的时候,最后一刻提示“无法下载应用程序 此时无法安装xxx”。

在签名的脚本里把--resource-rules那里注释掉也不行。后来在stackoverflow上看到如下的解决方案,经过测试是可以的:

点工程 > Targets > Select your target > Build Settings > Code Signing Resource Rules Path

添加 $(SDKROOT)/ResourceRules.plist

时间: 2024-10-15 11:35:31

iOS In House方式发布的相关文章

dropbox 死掉后 IOS 7.1 应用发布替代解决方案

由于大家都知道的原因Dropbox 挂掉了,免费的 https文件分享链接没有了,广大通过 dropbox https 分享链接来发布ios应用的童鞋悲剧了 .今天就给大家支个招儿. 分析  ios 7.1 安装链接 格式  itms-services://?action=download-manifest&url=https://xxx.plist 1.必须是 https 的安全链接. 2.链接是以 .plist 结尾 3.最重要的一点 这个 https://xxx.plist 必须要能够直接

iOS 测试在应用发布前后的痛点探索以及解决方案

作者-芈 峮 前言 iOS 开发从 2010 年开始在国内不断地升温,开发和测试相关的问题不绝于耳.iOS 测试主要涉及哪些内容?又有哪些挑战呢?带着疑问我们开始第一个大问题的讨论. iOS 测试的范围和可能遇到的挑战 iOS 测试范围 一般来说,每一个 iOS 应用的背后都会有一些后台服务.后台服务会给 iOS 应用提供丰富的数据和精彩的内容,后台服务的测试必须要包含在 iOS 测试中.当然,本文主要讨论一些 iOS 测试领域的内容,后台服务的测试在此就直接掠过.因此,下文提到的 iOS 测试

iOS——常用加密方式

iOS代码加密常用加密方式,常见的iOS代码加密算法包括MD5加密.AES加密.BASE64加密. 三大算法iOS代码加密是如何进行加密的: /////////////////////////////////////////////////////////////////// MD5 iOS代码加密使用方法 /////////////////////////////////////////////////////////////////// //创建MD5类,代码如下 #import <Foun

XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试

XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试 测试实机:iPhone 3GS(v6.1.2)其它机种也可以正常发布,方法以此类推 开发环境:Delphi XE7 Update 1(选择 iOS 8.1 SDK) 发布时需要到 Project > Option > Delphi Compiler > Linking > Minimum iOS version supported 设定为 6.0 实测画面:

QT--以共享的方式发布应用,QT依赖库

Building Qt as a Shared Library 因为:QT基本上都是采用动态编译的(被安装的OS中的),(如安装包往往都是默认动态编译处理好的动态库),所以我们采用动态连接的方式进行发布应用. 如果采用静态的方式发布,则需要重新通过对QT的源码进行“静态编译”后形成lib,或者obj的形式.然后安装在开发的系统中. <1>采用QTCreater继承开发环境编译,以及发布处理. 总体来说非常方便, (1)选择器以Debug或者Release形式构建 (2)先编译通过,完成bug修

FTP方式发布webservice

以前我发布webservice的步骤是:在  C:\inetpub\wwwroot\路径下发布webservice,然后再在IIS中添加网站并制定路径,这样每次发布了webservice后,需要把发布后的文件再拷贝到服务器上,比较麻烦:可以通过FTP方式直接发布到服务器上 采用拷贝的方式发布webservice 一:以文件系统方式发布webservice到本地 二:将发布的文件拷贝到到服务器的C:\inetpub\wwwroot\路径下 三:添加网站: FTP方式发布webservice: 一:

iOS常用加密方式

示例项目下载地址  https://github.com/cerastes/Encryption 1MD5 创建MD5类 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSString *)md5HexDigest:(NSString *)input; @end #import "CJMD5.h" #import <CommonCrypto/CommonDigest.h> @imp

iOS程序调试和发布时遇到的问题

最近接手一个项目,在用真机调试时出现了“Your build settings specify a provisioning profile with the UUID “”, however, no such provisioning profile was found”的出错.一直提示指定UUID的provisioning profile找不到,感觉很奇怪.明明自己的provisioning profile是刚下载好的,并且全是新安装.于是通过谷歌找到了答案. 参考地址:http://sta

iOS 12 正式版发布,易盾加固第一时间适配,再现“猎豹”般速度

今日凌晨,苹果正式对全球用户推送了iOS 12正式版,其中包括北京.台湾.香港等地区同步上线. 此次的iOS 12正式版被称为有史以来最稳定版本,据称已知Bug基本上都已经得到修复,同时提升了性能,运行速度明显加快.iOS 12适用于苹果多款产品,远至 2013 年的 iPhone 5s.iPad mini 2 等都可以受惠. iOS 12正式版发布不久,网易云易盾便在第一时间内完成了所有加固适配工作. 自从iOS 12发布Beta版本开始,易盾就开始进行兼容性方面的测试工作.2018年秋季新品