03:双层签名和重签名流程以及shell脚本重签名
复习
1:双向签名7不流程
2:查看签名信息和证书信息
3:查看用户权限
4:shell脚本签名
目录
1:双向签名7不流程
2:查看签名信息和证书信息
3:查看用户权限
4:shell脚本签名
正文
一:双层签名、双向验证
双层签名、双向验证。
1:签名示意图
2:两对秘钥、双层签名、双向认证
公钥M,私钥M(他们是一对)
苹果服务器:私钥A,
iOS手机系统:公钥A
2.1:Mac电脑通过csr文件向苹果服务器申请证书,
csr里面有公钥M,其他的必要信息,
2.2:苹果服务器会把证书给mac电脑。
证书:证书是苹果服务器用私钥A对公钥M的一个签名。
包含了公钥M,和公钥M的签名信息,签名信息使用私钥A来签名的。
使用苹果手机的公钥A来验证的。
2.3:描述文件:
设备id列表
appid,应用列表
权限文件
证书在描述文件里面。
2.4:Mac电脑拿到证书、描述文件。
打包生成ipa包。
用私钥M对可执行文件进行签名。app的签名。
把证书放到app中。
打包的时候,会把描述文件放到app中,描述文件包括了证书,应用列表
2.5:把app安装到ios系统中。
p12就是私钥M,
1:用公钥A对证书进行解析,解析出公钥M
iOS上苹果的公钥把provisioning profile文件解密了就验证了这个app是经过苹果官方认证的,
2:用公钥M对app进行验证。
也就验证了这个app来自于你这个开发者。不是别人冒充的。
3:描述文件限制:provisoning profile
现在有证书了,就可以安装所有的设备,那就不用上传到appStore。
所以苹果进行了限制,
1:限制设备
2: 具体对某一个app进行签名,对推送,进行了限制。
3:entitlements(授权文件)
描述文件: 里面包含了授权文件和证书签名、
4:查看描述文件的信息
security cms -D -i ****.mobileprovision
用来查找provision profile文件地址
/Users/XXX/Library/MobileDevice/Provisioning Profiles
xxx是文件名字
Entitlements 权限
application-identifier:bundleid
get-task-allow:是否允许调试
ExpirationDate:过期时间
ProvisionedDevices:注册的设备
xxx.mobileprovision 文件是一个plist文件
<?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>CreditDis</string> <key>ApplicationIdentifierPrefix</key> <array> <string>5876MU3PLA</string> </array> <key>CreationDate</key> <date>2019-10-29T00:46:09Z</date> <key>Platform</key> <array> <string>iOS</string> </array> <key>IsXcodeManaged</key> <false/> <key>DeveloperCertificates</key> <array> <data>MIIFuzCCBKOgAwIBAgIIcsooDVry1SswDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTkxMDI5MDAzMjU4WhcNMjAxMDI4MDAzMjU4WjCBrjEaMBgGCgmSJomT8ixkAQEMCkNMM0hLQzlFWjcxMjAwBgNVBAMMKWlQaG9uZSBEZXZlbG9wZXI6IEppYXFpIFdhbmcgKE1MMzlDRkUyQzgpMRMwEQYDVQQLDAo1ODc2TVUzUExBMTowOAYDVQQKDDFDaGluYSBFdmVyYnJpZ2h0IEJhbmsgQ08uLCBMVEQgQ3JlZGl0IENhcmQgQ2VudGVyMQswCQYDVQQGEwJDTjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL1Z4VdrWZtiSiT+MvhcCIaxRh6nAEzTkD3d+PIyOewG2hMZU/2awGpy9TcGpqywYMvtANuOkEQTCjJa7XN2PJ2T/06KWrgrY5SPtDJycW9MwxIA3KSJfGd+GSUthHTxIFJI/GKiTYZiMTEoAi87ooGznMPz5R7qHi4WOhicQmQOz+kSH5y3nDOIzFk5qxDMLYhPmhg40tXe6WUsS5ssk8DbE767pRPitc7u7AjW74OCnrqdxzaQbLqG2vVsJMLZlB/wBuVXtl9GhITy72GtZV7BRrc6dEEAFjxAq/kzFT/CIP9mNszDnK3AfXPdkRYqM3KwPj4ZQDUOlmtcvukBiBMCAwEAAaOCAfEwggHtMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUiCcXCam2GGCL7Ou69kdZxVJUo7cwPwYIKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLXd3ZHIwMTCCAR0GA1UdIASCARQwggEQMIIBDAYJKoZIhvdjZAUBMIH+MIHDBggrBgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMDYGCCsGAQUFBwIBFipodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1dGhvcml0eS8wFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMwHQYDVR0OBBYEFJoySx21Ev0zLAbG+oYHy6pxToQVMA4GA1UdDwEB/wQEAwIHgDATBgoqhkiG92NkBgECAQH/BAIFADANBgkqhkiG9w0BAQsFAAOCAQEAODu/C2XVJCKcqEsMfjS1oKtn2ghsmjjTPhok3SDhJv40icfLDtF93Q9dqLkiOktf1ec48z1T3otAD8VPJFLbAu9+GKsmsVw5i38wwl2U9rz5DXyP7A4tOST9azatALdTw01Fbkic3lD9TkilpUX+cMnyStqWsGa7808mAaPm0aGWIhp5Kw4/pVYmpT67TBxqCFfzGv2Yh4wCMYkS3/fXDEbsdAM3ii+XaOqRCM7EyGeWr5240MftQ14h7DDrMXIfJQebOVr4l1LN34bujMWpvouBx1oqyLO+GhsM2ZOHrqc85/ETKt6w6XP39wkh6QFd4wYIbhzKEPjeIU2Pa+gWIg==</data> <data>MIIF0TCCBLmgAwIBAgIIPbTqTqhHMtowDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTkxMDIyMTAwMTI0WhcNMjAxMDIxMTAwMTI0WjCBrzEaMBgGCgmSJomT8ixkAQEMCkNMM0hLQzlFWjcxMzAxBgNVBAMMKkFwcGxlIERldmVsb3BtZW50OiBKaWFxaSBXYW5nIChNTDM5Q0ZFMkM4KTETMBEGA1UECwwKNTg3Nk1VM1BMQTE6MDgGA1UECgwxQ2hpbmEgRXZlcmJyaWdodCBCYW5rIENPLiwgTFREIENyZWRpdCBDYXJkIENlbnRlcjELMAkGA1UEBhMCQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9WeFXa1mbYkok/jL4XAiGsUYepwBM05A93fjyMjnsBtoTGVP9msBqcvU3BqassGDL7QDbjpBEEwoyWu1zdjydk/9Oilq4K2OUj7QycnFvTMMSANykiXxnfhklLYR08SBSSPxiok2GYjExKAIvO6KBs5zD8+Ue6h4uFjoYnEJkDs/pEh+ct5wziMxZOasQzC2IT5oYONLV3ullLEubLJPA2xO+u6UT4rXO7uwI1u+Dgp66ncc2kGy6htr1bCTC2ZQf8AblV7ZfRoSE8u9hrWVewUa3OnRBABY8QKv5MxU/wiD/ZjbMw5ytwH1z3ZEWKjNysD4+GUA1DpZrXL7pAYgTAgMBAAGjggIGMIICAjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwMy13d2RyMTkwggEdBgNVHSAEggEUMIIBEDCCAQwGCSqGSIb3Y2QFATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSaMksdtRL9MywGxvqGB8uqcU6EFTAOBgNVHQ8BAf8EBAMCB4AwEwYKKoZIhvdjZAYBAgEB/wQCBQAwEwYKKoZIhvdjZAYBDAEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAD/HiK9wAlfSt5aJQuT8XyzcpqTdkHlJjxGegPE+thaHsRNqP38Q4N15iFEHl5sFzdRnc4yaTkT9YyZZpCwxpbnQfpHxsWlUQFmtcyDdtvu3XJpb6xcmzirSYmBhXAzwC7SmcohqAGqcI8p4c+b0QlI523Yzk8W2Mqi73p4hBDt6kHAWq1h73/Uc1msU9989B6Bwzifq6BYKHHHhZpPqUDYhtOIZpEQiCveSll9EguKoIPOiYpxlMT4/DVXNOytHVvSz+JiSzWD3xuygSblWKVRrMEo6khTTkvvI2jDk1wzxgAL4fKZqES5ezzgssYiP4oIL/wSaBrj7zIq0XqSDnKc=</data> </array> <key>Entitlements</key> <dict> <key>application-identifier</key> <string>5876MU3PLA.com.cebbank.xyk</string> <key>keychain-access-groups</key> <array> <string>5876MU3PLA.*</string> </array> <key>get-task-allow</key> <true/> <key>com.apple.developer.team-identifier</key> <string>5876MU3PLA</string> <key>aps-environment</key> <string>development</string> </dict> <key>ExpirationDate</key> <date>2020-10-28T00:46:09Z</date> <key>Name</key> <string>yghsh_dev_20191029</string> <key>ProvisionedDevices</key> <array> <string>5257bcb8938e4e6dbbe908622450918a5bdc61f9</string> <string>25ca953841c6c3f97e1d916f44f76d796fa058a9</string> <string>7e0da1c205d9a58c868266d99f2c8a17d4f65642</string> <string>43e3673c83a1056d1463f7e902ecaded99c0e8db</string> <string>e7447c0751a0ef7c8c84f7e72c0967fc064f8b21</string> <string>76593166cd370a9e975ed3005783fa3690fb97eb</string> <string>976dd4e3ec1931ca0d486fbf2dc6820bd369e891</string> <string>bba882d248f21a6df38604b89122e63aa0bb2a0b</string> <string>ec54ec221d5a62da45052433f92a5aafbdd9fa58</string> <string>066eb234a8b151b0a1fa0ffec022c34665213b07</string> <string>fdcf5eff39336079294dc39e19249b714274c4d9</string> <string>0ccb4fb26f7c4dc5577dd1a4b9657390b17b0112</string> <string>8023c4f949eead298073482341a0df95f1b32a7e</string> <string>551f3b95cfed25879bce15577d29964b309a0d3d</string> <string>456dd8ab4e8d9810f37990275ee49b6c6395603f</string> <string>f8d5971a8f8cade0bb50056516d05d926665e954</string> <string>c2320e6c1afea74cc3299da09534430fdd43fbba</string> <string>14113f41ba942973e3d1febd7b0157f4d899ebd4</string> <string>3edd2ed0cfc37e14310b32aa28b56a511fa7b4ad</string> <string>40cf9e14609c8de2a4ec9911ac885490ab6f8955</string> <string>bf12dfaa8369720db79800dce2b0d1bdf1cea1b7</string> <string>23c219ec1549539885431116d114ed69a366efb9</string> <string>4eec9a9c4a326e13e88e5c2af8ecf8202aa317ee</string> <string>5329d4406834956dceb7ebd86f4fc317a695f730</string> <string>ae2417fd5ff7713a032990e941d9e0c7aa95a149</string> <string>f46cd8714b3663379a76c418f3a5b50b3caab8b7</string> <string>3dcdc6a109f754773703d2d7d85ee00d7a3ef56a</string> <string>9250f2f39cc7da26fd8ec65ee910ca9c0f907514</string> <string>6bbad9e1591205d92a8620c58208dbc5839ccf18</string> <string>f0a299ffdbb19f1e8ed5088f45743ee21f6c9e96</string> <string>458c9b1a6909245e39c9f7bcface72bb3d1d39d0</string> <string>44ad18e054338547898c748da0e169dc9f1c1c0f</string> <string>d1543a75aa8f622a0f6e09e0c52a7017627a8c03</string> <string>e16ef4e8b06878054584000a8b9b02df6745c3f5</string> <string>04d9ed9cb1eb6931305b42299b3cd54b2dc4835d</string> <string>5a7b9823fc4b7219343167f9aef1fefcc4668189</string> <string>23387ab926ec9e0e98198d015ea53a8362cfdee5</string> <string>6bcfeab3efaf8abf6d94faea7c087a99c92f6a16</string> <string>aaa1a4e15a8a4134dd14155321b8e8f02fba3ffa</string> <string>2a2cdb96bdd9223b88bd24f051db743f27cda082</string> <string>ea07b7635387b0aa91f52f25e27c91e611719c3d</string> <string>5c7b2d58973f22aceedfb08c815ed40171bb3a0f</string> <string>ab86138f55e2e7454fb60af7f9d7300d1c4aa19a</string> <string>9319ce7d8d7454708eaa3ec36e6e5d0f64c2d5e6</string> <string>e835f7ded888bdcc131b13be90898ea2552e8b0c</string> <string>e1ca8bfcf4f8223f901d2a53e1b16806e6219100</string> <string>a247c65267217583ecb3c0113eb69413bcae4061</string> <string>35bba4f8ca9f116b6f0ea7297a2597502606cbd9</string> <string>cacee5eb9ba753203b367765f73a55d0c10705b3</string> <string>aea988226969f7dc0ebdd2873d3a0a9870b6d2ea</string> <string>a602fbd7d3adc4a3ba90b95936f350f1850ca748</string> <string>ac83a77644b7c5d5c3ce78256a5b13f84bb47ef2</string> <string>86a95f3b4dbf8339b3a2c5441680adc1a7e91371</string> <string>853d41c50b39c3bddff96347ca4d04664601e24f</string> <string>0ee2ac1da3ebe717a4aad48eda94ee7bd1895325</string> <string>1a719ca3a81c8c06e87738c525cb2362897d1aef</string> <string>5281a7049193939a001cb4d4d322cd0d090e8389</string> <string>41afb7542e698deccca1a8c133c60f2bf6e926b6</string> <string>6904333738e8343b7c00a381ed3483d65797340b</string> <string>98d6368b6c261914759ccea78c618cb1bbb090fb</string> <string>00008020-001920582130003A</string> <string>6ccc35714ae1ef652b3dfd9b2208665b746c1d37</string> <string>4ba06a53801cf244b0f02be3cdb5e9bd3ea5182d</string> <string>98969ca6f2b59853f64ac06caf8690f5da07067b</string> <string>00008020-001C646834D8002E</string> <string>00008020-000838110E82002E</string> <string>0694b66582a715f2b86a8e406c5a331dadecbe17</string> <string>1f6a4788b00d9689fb6d3cd4412ddfd746b588c3</string> <string>ec07b36ad5e1d92aa1b9bc091a17bd1587fec877</string> <string>ddd1ae9addf883966df082eecc00babdd1119389</string> <string>fa43b4b1b37bcb37b6b9f25bf12818b182337a72</string> <string>1f81b591571baf2777049eacd419477553500520</string> <string>00008020-000E19620A38002E</string> <string>00008020-001A54640CF8002E</string> <string>00008020-001A54C80E52002E</string> <string>e99c115fbc62fc087b5d1da9c05734a3686858eb</string> <string>e864964d45d686fecd93379fee8aefe18ccd561e</string> <string>d18613efb0b8aa36863c8702229184c374515204</string> </array> <key>TeamIdentifier</key> <array> <string>5876MU3PLA</string> </array> <key>TeamName</key> <string>China Everbright Bank CO., LTD Credit Card Center</string> <key>TimeToLive</key> <integer>365</integer> <key>UUID</key> <string>3c4c436e-1320-41b4-819c-7bf90d0c38b8</string> <key>Version</key> <integer>1</integer> </dict> </plist>
5:.app里面的签名信息
codesign -d -vv **.app
1:CodeResources:是资源签名
2:应用签名在macho文件中
6:签名流程
双向签名流程
1.在Mac上生成一对公私钥,分别为公钥L,私钥L
2.Apple 官方有自己固定的一对公钥和私钥,私钥A存在Apple后台,公钥A内置在iOS设备
3.把公钥L 上传Apple后台,Apple后台用私钥A对公钥L进行签名,将得到的签名+公钥L打包起来,称为证书
4.在苹果后台申请AppID,配置好设备IDs, Entitlements,这些额外信息+3中的证书组成的数据用私钥A签名,最后证书+额外信息+签名组成 Provisioning Profile 文件,下载到Mac本地
5.开发时,编译完一个app后,用本地私钥L对app进行签名,然后把4中的Provisioning Profile文件打包进App里,文件名为embedded.mobileprovision,安装到手机上。
6.安装时,iOS设备内置的公钥A对embedded.mobileprovision的数字签名进行验证,同时对里面的证书的签名也会验证(用来验证是苹果官方授权的)
7.如果6中验证通过,确保了embedded.mobileprovision的数据是苹果授权后,再取出里面数据做各种验证,包括公钥L对app签名进行验证,验证设备ID,AppID,权限开关。(用来验证app是这个公司官方开发的app。)
二:重新签名
1:获取ipa包
助手,
越狱手机中copy,
iTurns:12.6.3版本。
2: 查看签名和证书
2.1: 查看签名信息 Xcode用codesign签名
codesign -d -vv **.app
2.2:查看证书
security find-identity -v -p codesigning
2.3:查看有没有加密,没有加密可以操作
在***.app文件夹中执行,, ***是包的名字,
2.3.1:查看macho文件
otool -l ***
2.3.2:管道输出 macho文件
otool -l *** > ~/Desktop/123.txt
cryptid:
0:代表没有加密
非0:代表加密,加密的方式
2.3.3:通过管道符 筛选
otool -l *** | grep crypt
3: 手动重新签名
3.1:把plugins插件删除,把watch删除
3.2:对framework 签名
codesign -fs "iPhone Developer: Jiaqi Wang (ML39CFE2C8)" ***.frmework
FMDB.framework: replacing existing signature 重新签名成功
3.3:描述文件
1:把描述文件拷贝到***.app中
2:.plist把bundleid修改
3:用权限文件给app签名
codesign -fs "iPhone Developer: Jiaqi Wang (ML39CFE2C8)" —no-strict —entitlements=entitlements.plist ***.app
4:对app进行打包
Zip -ry ***.ipa payload
5: 信任描述文件(可以用xcode替换)
4:使用Xcode进行签名(OK)
4.1:删除插件,watch文件夹
4.2:修改bundleid,plist文件中的
4.3:对framework进行签名
4.4: 用Xcode对entiltlement安装,对app包签名,
5:shell脚本执行文件
5.1:zsh 123.sh
5.2: bash 123.sh
5.3: source 123.sh 影响当前的环境,
5.4: ./ 123.sh
注意:查看shells命令,得到mac电脑的命令
cd /private/etc
open .
cat shells
三:用户、组、权限、文件
linux unix windows Macos
多任务、多用户
1:文件组合权限
2:修改权限 写比较严格
四:脚本签名
# ${SRCROOT} 它是工程文件所在的目录 TEMP_PATH="${SRCROOT}/Temp" #资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包 ASSETS_PATH="${SRCROOT}/APP" #目标ipa包路径 TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa" #清空Temp文件夹 rm -rf "${SRCROOT}/Temp" mkdir -p "${SRCROOT}/Temp" #---------------------------------------- # 1. 解压IPA到Temp下 unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH" # 拿到解压的临时的APP的路径 TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1") # echo "路径是:$TEMP_APP_PATH" #---------------------------------------- # 2. 将解压出来的.app拷贝进入工程下 # BUILT_PRODUCTS_DIR 工程生成的APP包的路径 # TARGET_NAME target名称 TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app" echo "app路径:$TARGET_APP_PATH" rm -rf "$TARGET_APP_PATH" mkdir -p "$TARGET_APP_PATH" cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH" #---------------------------------------- # 3. 删除extension和WatchAPP.个人证书没法签名Extention rm -rf "$TARGET_APP_PATH/PlugIns" rm -rf "$TARGET_APP_PATH/Watch" #---------------------------------------- # 4. 更新info.plist文件 CFBundleIdentifier # 设置:"Set : KEY Value" "目标文件路径" /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist" #---------------------------------------- # 5. 给MachO文件上执行权限 # 拿到MachO文件的路径 APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<` #上可执行权限 chmod +x "$TARGET_APP_PATH/$APP_BINARY" #---------------------------------------- # 6. 重签名第三方 FrameWorks TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks" if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ]; then for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"* do #签名 /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK" done fi
1:创建一个项目
2:创建一个runscript,
添加命令
${SRCROOT}/signApp.sh
3:添加命令行代码于(signApp.sh)
注意
1、申请开发者证书:
将原来快要过期或者已经过期的测试证书、发布证书、Provision Profile文件等跟该AppID相关的证书和PP文件revoke,即删除掉。
注:删除证书和描述文件对已经上线的app没有影响。
2:别的电脑使用证书:
经过签名的的证书(Certificates)需要在别的电脑上使用的时候,需要将p12(私钥-申请证书的电脑)文件和证书一起传到别的电脑使用,这个时候就需要导出p12文件
引用