如何导出Xcode自动生成的Provisioning Profiles文件

6,446 阅读4分钟

需求

今天由于业务需要,需要导出线上包的Profiles文件,这不是so eazy的事情吗!

百度联盟需要上传签名描述文件

可当我进入苹果开发者网站,就傻眼了,我再三确认我没有进错开发者账号。我这个开发者账号上是有线上包的,怎么provisionning Profiles里面是空的呢?——估计是Xcode自动生成证书和profile文件导致的,profile文件只会本地保存不会上传到云端。

苹果开发者网站

那么问题来了,如何导出Xcode自动生成的某个特定bundle identifier的签名描述文件呢?
楼主还是倒腾了很久的,过程就不细说了,直接分享结果吧。

解决方案

思路:Xcode管理的.mobileprovision文件(无论是自动生成的还是你手动创建导入Xcode的)都在这个目录~/Library/MobileDevice/Provisioning Profiles,在这个目录中找到你要的.mobileprovision文件即可。

如果你有自己的方法找到,就不需要往下看了。

楼主进入这个目录直接在窗口里搜索bundle identifer发现搜不到,可能是因为.mobileprovision是一个二进制文件,直接搜搜不到,也有可能是我电脑有问题,你可以试试。

那就用强大的shell命令吧!
1.打开终端输入下列命令,回车,进入到Xcode管理的.mobileprovision文件目录

cd /Users/`whoami`/Library/MobileDevice/Provisioning\ Profiles/

whoami 命令读取系统用户名

2.继续输入下列命令,回车,把com.tencent.xin换成你的bundle identifier

grep -r -l com.tencent.xin .

-r递归查找,因为.mobileprovision是一个二进制文件,不加会报错
-l只显示文件名
一般情况下会有下列结果(除非你手动创建了好多个),这就是你要找的文件,一个是develop的,一个是distribution。

查询结果

3.那怎么区分dev和dis呢?

方法一:
继续输入下面的代码,会打开Finder并选中文件。选中这个文件后,按空格键,会生成mobileprovision文件的预览窗口,里面会显示对应的信息(如果你的没有请看方法二),仔细找一下就能区分了。

open -R ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

方法二:
楼主的公司的电脑可以显示预览内容,家里的电脑却不行,如图。我也不知道为什么。

不能显示详细的预览信息

Mac下可以用如下命令打印.mobileprovision文件的内容

security cms -D -i ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

打印结果如下,是一个XML文件,如果有ProvisionedDevices字段(设备列表),说明是dev版本的,dis版本的没有这个字段。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AppIDName</key>
	<string>aaa</string>
	<key>ApplicationIdentifierPrefix</key>
	<array>
	<string>X9AXXXXXXX</string>
	</array>
	<key>CreationDate</key>
	<date>2018-02-03T14:19:45Z</date>
	<key>Platform</key>
	<array>
		<string>iOS</string>
	</array>
	<key>DeveloperCertificates</key>
    <array>
		<data>MIIFmjCCBIKgAwIBA..省略
</array>
	<key>Entitlements</key>
	<dict>
		<key>keychain-access-groups</key>
		<array>
			<string>X9AXXXXXXX.*</string>		
		</array>
		<key>get-task-allow</key>
		<true/>
		<key>application-identifier</key>
		<string>X9AXXXXXXX.com.xxxx.aaa</string>
		<key>com.apple.developer.team-identifier</key>
		<string>X9AXXXXXXX</string>
	</dict>
	<key>ExpirationDate</key>
	<date>2019-02-03T14:19:45Z</date>
	<key>Name</key>
	<string>iOS Team Provisioning Profile: com.xxxx.aaa</string>
	<key>ProvisionedDevices</key>
	<array>
		<string>6126203xxxxxxxxxxxxxxx</string>
	  </array>
	<key>TeamIdentifier</key>
	<array>
		<string>X9AXXXXXXX</string>
	</array>
	<key>TeamName</key>
	<string>xiaoming</string>
	<key>TimeToLive</key>
	<integer>365</integer>
	<key>UUID</key>
	<string>5b857e06-xxxx-xxxx-xxxx-0d784xxxxx</string>
	<key>Version</key>
	<integer>1</integer>
</dict>

小技巧

Provisioning Profile配置旁边有个小感叹号,大家肯定点开看过,但是你知道顶部的profile文件的图标可以直接拖出来变成文件吗?如下图,直接把profile图标拖到桌面,就会在桌面生成对应的profile文件。
不过我试了下,不论上面的选项卡选Debug还会Release拖出来的都是dev版本的profile文件,如果你需要Release版本的profile文件,可能还是需要按我文章中的方法来查找😂。如果你有更好的方案,可以给我留言。

Provisioning旁的感叹号

直接拖出profile文件

如果觉得这篇文章对你有帮助,请点个赞吧。如果有疑问可以关注我的公众号我留言。
转载请注明出处,谢谢!

参考链接:
Mac Security工具使用总结find-identity
mobileprovision shell 读取
Xcode自动管理证书文件模式下更新provisioning profile文件