<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발하는 따봉냥이</title>
    <link>https://ch2n.tistory.com/</link>
    <description>iOS 개발 공부해봅시다.</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 18:10:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>따봉냥이</managingEditor>
    <image>
      <title>개발하는 따봉냥이</title>
      <url>https://tistory1.daumcdn.net/tistory/2958199/attach/23de04a5714346a8b2a58d41c70dc40d</url>
      <link>https://ch2n.tistory.com</link>
    </image>
    <item>
      <title>RSA 암호화를 통한 전자서명 구현</title>
      <link>https://ch2n.tistory.com/18</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;증권사 프로젝트를 하면서 비대칭키 암호화 방식을 이용한 전자서명 메커니즘을 구현해야 하는 일이 생겼다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대칭키 암호화만 쓰다가 비대칭키라.. 어떻게 이게 되는거지 싶었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사실 아직도 이해가 안가는 부분이 좀 많긴 한데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이것저것 시도해보면서 구현은 성공해서 정리를 좀 하려고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는 비대칭키 암호화 알고리즘으로 RSA 를 선택했다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;비대칭키 암호화 방식의 대표적인 방식 중 하나였기 때문에, 레퍼런스가 많을 것으로 생각하고 선정했다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여하튼, 먼저 RSA 암호화에 사용할 공개 키와 개인 키를 생성해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1687756435017&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var publicKey	: SecKey?
var privateKey	: SecKey?

let keyPairAttr: [NSString: Any] = [
	kSecAttrKeyType: kSecAttrKeyTypeRSA,
	kSecAttrKeySizeInBits: 2048 as NSObject
]

let statusCode = SecKeyGeneratePair(keyPairAttr as CFDictionary, &amp;amp;publicKey, &amp;amp;privateKey)

if statusCode != noErr {
	print(&quot;Key generate success&quot;)
} else {
	print(&quot;Key generate fail&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 생성하고자 하는 키의 정보를 Dictionary 형태로 정의해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;샘플 코드에 작성한 kSecAttrKeyType, kSecAttrKeySizeInBits 는 필수 값이고 이외 옵션들은 선택사항이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;생성한 키를 키체인에 저장, 구분을 위한 Tag 지정들 여러 옵션들이 있으니 필요하다면 공식 문서를 읽어보자.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/security/1395339-seckeygeneratepair/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.apple.com/documentation/security/1395339-seckeygeneratepair/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687756946721&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SecKeyGeneratePair(_:_:_:) | Apple Developer Documentation&quot; data-og-description=&quot;Creates an asymmetric key pair.&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/security/1395339-seckeygeneratepair/&quot; data-og-url=&quot;https://docs.developer.apple.com/documentation/security/1395339-seckeygeneratepair/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/M1apK/hyS8sugOAK/Y7M9qKjf2gcF2kmyPht5F1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bDbiWq/hyS8vdsljw/6TzOviGDlsk9F48sCJPjrk/img.jpg?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/security/1395339-seckeygeneratepair/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/security/1395339-seckeygeneratepair/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/M1apK/hyS8sugOAK/Y7M9qKjf2gcF2kmyPht5F1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bDbiWq/hyS8vdsljw/6TzOviGDlsk9F48sCJPjrk/img.jpg?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SecKeyGeneratePair(_:_:_:) | Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Creates an asymmetric key pair.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나는 RSA 암호화를 구현해야 하기 때문에 RSA 키 타입으로 지정, 키의 크기는 최대값인 2048 비트로 설정해줬다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 SecKeyGeneratePair 를 실행되며 리턴된 OSStatus 로 키 쌍 생성 유무를 체크해주면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;문제없이 생성되었다면, 이제 키 쌍을 저장해야 하는데 공개 키를 서버에 보내야 했기 때문에 String 형태로 변경해줬다.&lt;/p&gt;
&lt;pre id=&quot;code_1687767430329&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func keyToString(key : SecKey) -&amp;gt; String? {
	var error : Unmanaged&amp;lt;CFError&amp;gt;?
	let keyData : CFData? = SecKeyCopyExternalRepresentation(key, &amp;amp;error)
    
	guard error == nil else {
		debugPrint(error)
		// do something when failed represent key
		return nil
	}
    
	let keyString = (keyData as Data).base64EncodedString()
	print(keyString)
    
	return keyString
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;SecKeyCopyExternalRepresentation 은 SecKey 타입으로 되어있는 키들을 CFData 로 변환해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 변환된 키를 Base64 로 인코딩하여 String 형태로 변환해주고 이후 서버에 보내서 저장을 해줬다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제는 서버에 인증을 받기 위한 데이터를 만드는 작업이 필요한데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내가 초반에 생각했던 건 개인 키로 특정 데이터를 암호화하여 서버에서 복호화를 통해 인증하면 될 줄 알았다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그런데, 개인 키로 암호화를 아무리 시도 해 봐도 오류가 나서 되게 패닉에 빠져있었는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;키 생성 할 때 주는 옵션들을 잘 살펴보면, 따로 설정해주지 않는 이상 개인 키로 암호화는 불가하게 디폴트 설정이 되어있다..!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 그걸 떠나서 애초에 암호화 하는 함수와 서명을 하는 함수가 따로 나누어져 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;서명 = 암호화&quot; 로 생각하고 있던게 잘못 된 생각이였던 것...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dG1Af6/btslhc1ugGc/GMrMa4ajwSJ1BIvXlwbwP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dG1Af6/btslhc1ugGc/GMrMa4ajwSJ1BIvXlwbwP0/img.png&quot; data-alt=&quot;https://developer.apple.com/documentation/security/1643957-seckeycreateencrypteddata&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dG1Af6/btslhc1ugGc/GMrMa4ajwSJ1BIvXlwbwP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdG1Af6%2Fbtslhc1ugGc%2FGMrMa4ajwSJ1BIvXlwbwP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;140&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://developer.apple.com/documentation/security/1643957-seckeycreateencrypteddata&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JQOJO/btsltkKX6gS/CCwgWKRS9QnSe0KHk3iNNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JQOJO/btsltkKX6gS/CCwgWKRS9QnSe0KHk3iNNk/img.png&quot; data-alt=&quot;https://developer.apple.com/documentation/security/1643916-seckeycreatesignature&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JQOJO/btsltkKX6gS/CCwgWKRS9QnSe0KHk3iNNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJQOJO%2FbtsltkKX6gS%2FCCwgWKRS9QnSe0KHk3iNNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;141&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://developer.apple.com/documentation/security/1643916-seckeycreatesignature&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 공식 문서 설명에도 암호화 함수는 &lt;b&gt;using a public key &lt;/b&gt;서명 함수는 &lt;b&gt;using a private key&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;라고 적혀있었다...&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여하튼, 이렇게 알아낸 SecKeyCreateSignature 함수를 사용해서 개인 키를 사용한 서명 데이터를 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1687769678532&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func sign(data : Data, privateKey : Data) -&amp;gt; String? {
	let keyPairAttr: [NSString: Any] = [
		kSecAttrKeyType: kSecAttrKeyTypeRSA,
		kSecAttrKeyClass: kSecAttrKeyClassPrivate
	]
	var error : Unmanaged&amp;lt;CFError&amp;gt;?
    
	guard let secKey = SecKeyCreateWithData(privateKey as CFData, keyPairAttr as CFDictionary, &amp;amp;error) else {
		debugPrint(error)
		// do something when failed create private key
		return nil
	}
    
	guard let signData = SecKeyCreateSignature(secKey, .rsaSignatureMessagePKCS1v15SHA256, data as CFData, &amp;amp;error) else {
		debugPrint(error)
		// do something when failed signing data
		return nil
	}
    
	let signDataString = (signData as Data).base64EncodedString()
	print(signDataString)
    
	return signDataString
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Dictionary 형태로 가져오려는 키의 정보를 정의하고, SecKeyCreateWithData 함수를 통해 개인 키를 가져온다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 SecKeyCreateSignature 함수를 사용하여 데이터를 서명할 수 있는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;두 번째 파라미터는 SecKeyAlgorithm 타입이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 digest 와 message 두 개로 갈리는데 이게 무슨 차이인지 헷갈려서 조금 찾아봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bujnhD/btslvzOhZHK/TMgEImZZObFSjKQCMQG891/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bujnhD/btslvzOhZHK/TMgEImZZObFSjKQCMQG891/img.png&quot; data-alt=&quot;https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/signing_and_verifying&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bujnhD/btslvzOhZHK/TMgEImZZObFSjKQCMQG891/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbujnhD%2FbtslvzOhZHK%2FTMgEImZZObFSjKQCMQG891%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1546&quot; height=&quot;220&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/signing_and_verifying&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서명하고자 하는 데이터가 이미 해싱 알고리즘으로 digest (해시 값) 로 변환되어 있다면 digest,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일반 문자열 같은 데이터라면 message 를 사용하면 되는 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;뒤에 붙은 해싱 알고리즘은 내가 사용하고자 하는 해싱 알고리즘일테고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;만약 digest 를 사용한다면 당연하게도 내가 가지고 있는 해시 값을 생성할 때 사용한 알고리즘을 넣어야 하겠지..?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 해서 서명된 데이터가 나오면 Base64 로 인코딩 하여 String 으로 변환해서 리턴해줬다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 서버로 보내서 검증하고 결과를 Response 받으면 전자서명 구현은 끝이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서버 쪽 작업은 Java로 했는데 이건 다음 글로 적던,,, 시간이 나면 정리를 해야겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 글을 쓰면서 깨달은건데, Apple 문서에 서명하는 과정에 대해 잘 정리 된 문서가 있었다. ( 자발적 삽질... )&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서명 뿐만 아니라 검증하는 방법도 정리가 되어 있는 것 같으니 더 궁금한게 있다면 요 문서를 봐도 괜찮을 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/signing_and_verifying&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/signing_and_verifying&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS</category>
      <category>RSA</category>
      <category>SWiFT</category>
      <category>비대칭키</category>
      <category>전자서명</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/18</guid>
      <comments>https://ch2n.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 27 Jun 2023 10:04:12 +0900</pubDate>
    </item>
    <item>
      <title>iOS 16.4 이상에서 WKWebview 디버깅 안될 때</title>
      <link>https://ch2n.tistory.com/16</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 웹뷰 디버깅을 해봐야 할 일이 생겨서 Safari에서 보려는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;계속 &quot;검사할 수 있는 응용프로그램 없음&quot; 만 뜨고 웹뷰가 잡히지를 않는 것이었다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;맥북 문제인지 빌드할 때 뭐가 잘못된 건지 싶어서 재부팅, 재빌드도 해봤지만 안되었다 &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;찾아보니까 iOS 16.4부터 WKWebview에&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;웹뷰 디버깅 여부를 설정할 수 있는 프로퍼티가 추가되었다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FDopH/btsi9WkKvR9/mAvTkJSu8N2sHc89UBBne1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FDopH/btsi9WkKvR9/mAvTkJSu8N2sHc89UBBne1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDopH/btsi9WkKvR9/mAvTkJSu8N2sHc89UBBne1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDopH%2Fbtsi9WkKvR9%2FmAvTkJSu8N2sHc89UBBne1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;189&quot; data-origin-width=&quot;1708&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기본 값이 false라고 하니 따로 설정해주지 않았다면 iOS 16.4 이상부터는 안 되는 게 맞는 듯하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1686200521369&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if #available(iOS 16.4, *) {
            webView.isInspectable = true
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;요로코롬 수정해 주면 다시 웹뷰 디버깅을 할 수 있다.&lt;/p&gt;</description>
      <category>iOS</category>
      <category>inspect</category>
      <category>iOS 16.4</category>
      <category>SWiFT</category>
      <category>WKwebview</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/16</guid>
      <comments>https://ch2n.tistory.com/16#entry16comment</comments>
      <pubDate>Thu, 8 Jun 2023 14:04:01 +0900</pubDate>
    </item>
    <item>
      <title>Java 에서 RSA 복호화 시 Decryption error</title>
      <link>https://ch2n.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Android에서 RSA 암호화 후 암호화한 데이터를 서버로 보내서 복호화를 하려고 하는데 계속해서 오류가 났다,,,&lt;/p&gt;
&lt;pre id=&quot;code_1685596283324&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BadPaddingException: Decryption error&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 경우에는 클라이언트에서 RSA 키 쌍 생성 후에 공개 키(Public Key)는 서버에 저장,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 키(Private Key)  는 암호화 후 클라이언트에 저장을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공개 키나 암호화 한 데이터를 전달할 때 인코딩하면서 문제가 생긴건가 싶어서 Android 와 서버에서의 값을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 비교해봤지만 전부 동일했고, 심지어 Android 에서 바로 복호화 했을 때는 정상적으로 복호화가 되었다...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Android]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685598087046&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static String encrypt(String plainText, String strPrivateKey) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance(&quot;RSA&quot;);
        byte[] bytePrivateKey = Base64.decode(strPrivateKey, Base64.NO_WRAP);
        PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(bytePrivateKey);
        PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);

        Cipher cipher = Cipher.getInstance(&quot;RSA&quot;);
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);

        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());

        return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Server]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685598215684&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static String decrypt(String encryptedText, String strPublicKey) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance(&quot;RSA&quot;);
        byte[] bytePublicKey = Base64.getDecoder().decode(strPublicKey);
        X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytePublicKey);
        PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
        
        Cipher cipher = Cipher.getInstance(&quot;RSA&quot;);
        cipher.init(Cipher.DECRYPT_MODE, publicKey);

        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText.getBytes());
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜.. 다를 게 없는데 복호화시 오류가 나서 이것저것 삽질하느라 시간을 많이 썼는데 결국 아래처럼 코드 수정 후 해결했다.&lt;/p&gt;
&lt;pre id=&quot;code_1685598370687&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cipher cipher = Cipher.getInstance(&quot;RSA/ECB/PKCS1Padding&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결책은 형식을 명시적으로 지정하는 것... 하루 꼬박 날린 것 같은데 나와 같이 삽질하는 사람이 없길 바라면서 글을 작성한다 &lt;/p&gt;</description>
      <category>Java</category>
      <category>Decryption error</category>
      <category>Java</category>
      <category>RSA</category>
      <category>복호화 오류</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/15</guid>
      <comments>https://ch2n.tistory.com/15#entry15comment</comments>
      <pubDate>Thu, 1 Jun 2023 14:49:22 +0900</pubDate>
    </item>
    <item>
      <title>Java Base64 Decode 시 &amp;quot;illegal base64 character a&amp;quot;</title>
      <link>https://ch2n.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RSA 암호화를 이용한 모바일 앱과의 인증절차 기능 개발 도중 Android 앱에서 넘긴 Base64 인코딩 문자열을&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Java 에서 Base64.getDecoder().decode() 를 사용하여 디코딩하려는데 Exception 이 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685515350505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java.lang.IllegalArgumentException: Illegal base64 character a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니까 Base64로 디코딩 하려는 문자열에 개행(줄 바꿈)이 되어 있어서 나는 오류라더라...&lt;/p&gt;
&lt;pre id=&quot;code_1685515500831&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String.replaceAll(&quot;\\r\\n|\\r|\\n&quot;,&quot;&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;replaceAll() 메서드를 이용해서 개행 특수 문자를 빈 값으로 변경해 주면 해결된다.&lt;/p&gt;</description>
      <category>Java</category>
      <category>BASE64</category>
      <category>Java</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/14</guid>
      <comments>https://ch2n.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 31 May 2023 15:47:31 +0900</pubDate>
    </item>
    <item>
      <title>iOS 파일 앱에서 앱 폴더가 보이지 않을 때</title>
      <link>https://ch2n.tistory.com/13</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;앱 내에서 다운로드 한 파일들은 기본적으로 앱 별도의 저장공간에 저장이 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;회사 내부에서 사용중이던 앱은 해당 앱의 저장공간을 파일 앱에서 조회할 수가 있었는데&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;고객사 앱 중, 파일 앱에서 저장공간을 조회할 수 없는 앱이 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;예전에 이 문제와 관련해서 설정을 한 기억이 있었던 것 같은데,, 조금 헤매서 글로 남긴다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 앱의 info.plist 파일에 키 값을 설정한다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;37&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HX1JT/btrTxJElG6b/MAmMyohfl20k9yPZyVzK1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HX1JT/btrTxJElG6b/MAmMyohfl20k9yPZyVzK1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HX1JT/btrTxJElG6b/MAmMyohfl20k9yPZyVzK1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHX1JT%2FbtrTxJElG6b%2FMAmMyohfl20k9yPZyVzK1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;37&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;37&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Application supports iTunes file sharing&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Supports&amp;nbsp;opening&amp;nbsp;documents&amp;nbsp;in&amp;nbsp;place&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;위의 두 값을 info.plist 파일에 YES로 설정해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나 같은 경우엔 &lt;b&gt;Supports opening documents in place&amp;nbsp;&lt;/b&gt;이 값을 빠져있어서 조회가 안됐다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;보통은 저 두 값 설정 후에 파일 앱에서 &lt;b&gt;&quot;둘러보기 &amp;gt; 나의 iPhone&quot;&lt;/b&gt; 를 보면 앱 이름으로 된 디렉토리가 생성되어 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저렇게 했는데도 안되는 경우,, 스택오버플로 에서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;앱 삭제후 다시 빌드하거나 설치해서 보면 되는 경우가 있다고 하니 참고하시길..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 끄읕 :)&lt;/p&gt;</description>
      <category>iOS</category>
      <category>app directory</category>
      <category>File app</category>
      <category>ios</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/13</guid>
      <comments>https://ch2n.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 13 Dec 2022 15:44:01 +0900</pubDate>
    </item>
    <item>
      <title>iOS MDM 인증서 발급 및 프로파일 생성 (1)</title>
      <link>https://ch2n.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;허허.. 회사에서 iOS MDM 개발을 하라는 업무를 줘서 난데없이 MDM을 개발하게 되었다... (이땐 MDM이 뭔지도 몰랐다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MDM이란?? Mobile Device Management 의 약자로, 쉽게 말해서 그냥 기기 관리 시스템?? 이라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDM 개발하라는데... 진짜 정보가 없어서 눈물나는 와중에 그나마 찾아낸 정보들로 어렵게 개발을 하긴 했다..ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 작성하는 목적은 사람은 망각의 동물이라 하지 않던가... 나중에 내가 잊을 확률이 99.9% 이기 때문에 작성하기도 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보편적으로 MDM 개발을 하는 경우는 드물지만, 나처럼 MDM 정보가 필요한 소수의(?) 사람들을 위해 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 내가 MDM 개발을 하며 참고했던 사이트들이다. 현재 작성중인 글을 읽고도 잘 안되신다면... 참고하시길..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 첫번째 사이트 내용대로 인증서 발급하려고 하면 안되더라..ㅋㅋㅋ 예전에 할때는 됐는데 지금은... 내가 잘못한걸 수도 있으니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판단은 각자의 몫으로!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신, 인증서 발급 내용 이외에 프로파일 생성하는 내용도 있으니 그건 참고할만 하다. (근데 그것도 뭔가 좀 이상함...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot;&gt;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1614321626060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How to create a verified iOS Mobile Device Management(MDM) profile?&quot; data-og-description=&quot;The Mobile Device Management (MDM) protocol provides a way for system administrators to send device management commands to managed&amp;hellip;&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot; data-og-url=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cz2nvZ/hyJnYqYPMV/bPv9FclJnIzNsnoX4kGGgk/img.png?width=300&amp;amp;height=534&amp;amp;face=0_0_300_534,https://scrap.kakaocdn.net/dn/fq7Y4/hyJn8UFZ8M/43veeUHeu1RziaMCm38sPK/img.png?width=60&amp;amp;height=45&amp;amp;face=0_0_60_45,https://scrap.kakaocdn.net/dn/cqsub2/hyJpzb4teE/I7bUkBLdPwVaG31EoY4241/img.png?width=60&amp;amp;height=37&amp;amp;face=0_0_60_37&quot;&gt;&lt;a href=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cz2nvZ/hyJnYqYPMV/bPv9FclJnIzNsnoX4kGGgk/img.png?width=300&amp;amp;height=534&amp;amp;face=0_0_300_534,https://scrap.kakaocdn.net/dn/fq7Y4/hyJn8UFZ8M/43veeUHeu1RziaMCm38sPK/img.png?width=60&amp;amp;height=45&amp;amp;face=0_0_60_45,https://scrap.kakaocdn.net/dn/cqsub2/hyJpzb4teE/I7bUkBLdPwVaG31EoY4241/img.png?width=60&amp;amp;height=37&amp;amp;face=0_0_60_37');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to create a verified iOS Mobile Device Management(MDM) profile?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Mobile Device Management (MDM) protocol provides a way for system administrators to send device management commands to managed&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot;&gt;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1614321788566&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MDM Push 인증서 만들기&quot; data-og-description=&quot;iOS 에서 MDM (Mobile Device Managerment) 을 구현하기 위해서는 Apple 의 APNS 시스템을 이용해야 한다. 또한, 프로파일 인증 등을 위해서는 SCEP(Simple Certificate Enrollment Protocol) 가 구현된 서버가 필..&quot; data-og-host=&quot;projectjo.tistory.com&quot; data-og-source-url=&quot;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; data-og-url=&quot;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cer8Y2/hyJnXFEl1I/BKEipi70OQji0Akcv4RyVk/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621,https://scrap.kakaocdn.net/dn/RGSjl/hyJpFQSMRV/Gk1j15B1KzBSknwk13nAoK/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621,https://scrap.kakaocdn.net/dn/CFLmQ/hyJn79kuhk/kMNdFtOyP2Qh5Ypi3YyAG0/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621&quot;&gt;&lt;a href=&quot;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://projectjo.tistory.com/entry/MDM-Push-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cer8Y2/hyJnXFEl1I/BKEipi70OQji0Akcv4RyVk/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621,https://scrap.kakaocdn.net/dn/RGSjl/hyJpFQSMRV/Gk1j15B1KzBSknwk13nAoK/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621,https://scrap.kakaocdn.net/dn/CFLmQ/hyJn79kuhk/kMNdFtOyP2Qh5Ypi3YyAG0/img.png?width=727&amp;amp;height=621&amp;amp;face=0_0_727_621');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MDM Push 인증서 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;iOS 에서 MDM (Mobile Device Managerment) 을 구현하기 위해서는 Apple 의 APNS 시스템을 이용해야 한다. 또한, 프로파일 인증 등을 위해서는 SCEP(Simple Certificate Enrollment Protocol) 가 구현된 서버가 필..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;projectjo.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;iOS MDM 인증서 발급&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7ez2T/btqYKapnllp/k5t70KFaWBnzk32M1ER960/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7ez2T/btqYKapnllp/k5t70KFaWBnzk32M1ER960/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7ez2T/btqYKapnllp/k5t70KFaWBnzk32M1ER960/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7ez2T%2FbtqYKapnllp%2Fk5t70KFaWBnzk32M1ER960%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;880&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;먼저,&lt;b&gt; 키체인 접근 &amp;gt; 인증서 지원 &amp;gt; 인증 기관에서 인증서 요청... &lt;/b&gt;를 눌러 CSR을 발급받자.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;사용자 이메일 주소에는 Apple Enterprise 계정 이메일을, 일반 이름엔 계정 이름?? 닉네임?? 을 넣는다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7HEUr/btqYvd2Msoq/rxAHUHtcLd4B0fMN6caS5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7HEUr/btqYvd2Msoq/rxAHUHtcLd4B0fMN6caS5K/img.png&quot; data-alt=&quot;https://developer.apple.com/account/resources/certificates/add&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7HEUr/btqYvd2Msoq/rxAHUHtcLd4B0fMN6caS5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7HEUr%2FbtqYvd2Msoq%2FrxAHUHtcLd4B0fMN6caS5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;657&quot; height=&quot;894&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://developer.apple.com/account/resources/certificates/add&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple Developer 사이트에 가서 계정 로그인 후에 인증서 생성을 누르면 Services 하위에 MDM CSR 이라는 항목이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택해서 MDM CSR을 발급 받으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Enterprise 계정인데 MDM CSR 항목이 보이지 않는다면, &lt;br /&gt;&lt;a href=&quot;mailto:devprograms@apple.com&quot;&gt;devprograms@apple.com&lt;/a&gt; 또는 &lt;a href=&quot;https://developer.apple.com/contact/topic/select&quot;&gt;https://developer.apple.com/contact/topic/select&lt;/a&gt; 로 메일 또는 문의를 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MDM 인증서 발급을 위해 MDM CSR 을 발급받으려 하는데, 해당 항목이 비활성화 되어 있다 이런식으로 넣으면 된다고 한다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 회사 계정에선 이미 열려있어서 나는 따로 연락은 하지 않았다. 다른 사람들의 글을 보면 보통 1시간 ~ 하루 이내에 열어준다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;2356&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLEkE6/btqYAupaDi8/ATiGKpnksm4VzQaPLMwLzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLEkE6/btqYAupaDi8/ATiGKpnksm4VzQaPLMwLzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLEkE6/btqYAupaDi8/ATiGKpnksm4VzQaPLMwLzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLEkE6%2FbtqYAupaDi8%2FATiGKpnksm4VzQaPLMwLzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2356&quot; height=&quot;560&quot; data-origin-width=&quot;2356&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방금 생성한 CSR 파일을 넣어서 MDM CSR을 발급 받자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;중요한 점!! 사용한 CSR 파일은 고이 잘 모셔놓자.. 나중에 또 써야된다.&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;2304&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyGowg/btqYE7UhHhr/FxgGXIfQFuwwcs1T9Aa6PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyGowg/btqYE7UhHhr/FxgGXIfQFuwwcs1T9Aa6PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyGowg/btqYE7UhHhr/FxgGXIfQFuwwcs1T9Aa6PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyGowg%2FbtqYE7UhHhr%2FFxgGXIfQFuwwcs1T9Aa6PK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2304&quot; height=&quot;352&quot; data-origin-width=&quot;2304&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 MDM CSR을 정상적으로 발급 받았으면 MDM CSR 항목을 선택하는 화면이 있던 곳으로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래로 스크롤 해보면 위의 사진과 같이 Worldwide Developer Relations Certificate ~ 인증서를 받을 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 여기서 이왕 받는거 기간이 긴걸 받아야지 라는 생각으로 02/20/2030 이 만료일인 인증서로 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LJw35/btqYE7mvihz/rNucdicmD1N5AdFrJ3vh6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LJw35/btqYE7mvihz/rNucdicmD1N5AdFrJ3vh6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LJw35/btqYE7mvihz/rNucdicmD1N5AdFrJ3vh6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLJw35%2FbtqYE7mvihz%2FrNucdicmD1N5AdFrJ3vh6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;268&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 Apple의 공용 인증서들이 모여있는 &lt;a href=&quot;https://www.apple.com/certificateauthority/&quot;&gt;https://www.apple.com/certificateauthority/&lt;/a&gt; 이곳으로 이동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Apple Root Cerificates&lt;/b&gt; 하위 항목 중 &lt;b&gt;Apple Inc. Root Certificate&lt;/b&gt; 를 클릭해서 다운받는다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFEplW/btqYvdPkvCt/CigSqLoAakR6jzoEJdeeOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFEplW/btqYvdPkvCt/CigSqLoAakR6jzoEJdeeOk/img.png&quot; data-alt=&quot;회사명은 가렸읍니다...ㅎㅎ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFEplW/btqYvdPkvCt/CigSqLoAakR6jzoEJdeeOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFEplW%2FbtqYvdPkvCt%2FCigSqLoAakR6jzoEJdeeOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;900&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회사명은 가렸읍니다...ㅎㅎ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Apple Developer 사이트에서 발급받은 MDM CSR 을 키체인에 등록 후 검색창에 MDM Vendor 라고 검색하면 위의 사진처럼 인증서가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 인증서의 개인 키만 내보내기 하면 되는데, 내보내기 할 때 입력하는 암호는 당연하지만 외우거나 따로 기록해놓자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내보내기 할 때 사용한 파일명은 &lt;b&gt;vendor.p12&lt;/b&gt; 이니, 이후 내용에서 헷갈리지 마시길...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmatiz/btqYAtcM0E1/JXWU7iTPRP3AVoQwwaHyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmatiz/btqYAtcM0E1/JXWU7iTPRP3AVoQwwaHyk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmatiz/btqYAtcM0E1/JXWU7iTPRP3AVoQwwaHyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmatiz%2FbtqYAtcM0E1%2FJXWU7iTPRP3AVoQwwaHyk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;696&quot; height=&quot;242&quot; data-origin-width=&quot;1104&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 발급, 저장했던 항목들을 모아놓으면 위의 사진처럼 총 5개가 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 그리고, 고이 모셔놓으라 했던 MDM CSR 파일을 발급 받을 때 사용한 CSR 파일은 customer.cer 로 파일을 바꿔준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, 이름이 customer.cer 로만 변경되는 경우가 있는데 확실히 확장자가 cer로 변경되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diKdSd/btqYxoQq3tX/rFQArR2h9PHXQKhfoXtAa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diKdSd/btqYxoQq3tX/rFQArR2h9PHXQKhfoXtAa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diKdSd/btqYxoQq3tX/rFQArR2h9PHXQKhfoXtAa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiKdSd%2FbtqYxoQq3tX%2FrFQArR2h9PHXQKhfoXtAa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;223&quot; height=&quot;1068&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 변경된건지 잘 모르겠다면, customer.cer 우클릭 해서 정보 가져오기 를 클릭하면 사진처럼 파일 정보가 보이는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;이름 및 확장자&amp;nbsp;&lt;/b&gt;항목을 보면 위의 사진처럼 변경되어 있어야 한다. 안 되어있다면 바꿔주자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 정상적으로 다 있다 가정하고... 터미널을 켜서 저 파일들이 모여 있는 경로로 이동 후 아래의 커맨드들을 입력해주자.&lt;/p&gt;
&lt;pre id=&quot;code_1614326071201&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openssl x509 -inform der -in mdm.cer -out mdm.pem
openssl x509 -inform der -in AppleIncRootCertificate.cer -out root.pem
openssl x509 -inform der -in AppleWWDRCAG3.cer -out intermediate.pem
openssl req -inform pem -outform der -in customer.cer -out customer.der&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kV0hA/btqYxpV1SPE/Rr2FlKNo2KoUxfZVo1uBdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kV0hA/btqYxpV1SPE/Rr2FlKNo2KoUxfZVo1uBdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kV0hA/btqYxpV1SPE/Rr2FlKNo2KoUxfZVo1uBdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkV0hA%2FbtqYxpV1SPE%2FRr2FlKNo2KoUxfZVo1uBdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;705&quot; height=&quot;204&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 커맨드 실행 후 생성된 파일들과 vendor.p12 파일을 한 곳에 모으면 위의 사진과 같이 파일이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 5개의 파일들을 하나로 만드는 작업을 해야 하는데, 우리 Eclipse 의 도움이 필요하다..ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;2740&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqp6c4/btqYuseN9DO/2xjiKIsqWI6znn6BOUGVfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqp6c4/btqYuseN9DO/2xjiKIsqWI6znn6BOUGVfk/img.png&quot; data-alt=&quot;사이트가 CSS가 다 깨진듯(?) 나만 그런가...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqp6c4/btqYuseN9DO/2xjiKIsqWI6znn6BOUGVfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqp6c4%2FbtqYuseN9DO%2F2xjiKIsqWI6znn6BOUGVfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2740&quot; height=&quot;200&quot; data-origin-width=&quot;2740&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사이트가 CSS가 다 깨진듯(?) 나만 그런가...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning/&quot;&gt;http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning/&lt;/a&gt; 링크로 가서 Java 소스를 받는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ejDr8B/btqYwhcZwgB/VnVTbs73X9oyX8kOPn7qiK/Softhinker.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Softhinker.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.28MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트에서 받아야 하는 소스를 첨부 해놓긴 했는데, 신뢰가 안가신다면 뭐.... 직접 다운 받으시면 됩니당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사진에 보면 나오는 &lt;b&gt;&amp;darr;&lt;/b&gt; 요 화살표 버튼을 클릭해주면 소스가 다운로드 된다. (사이트 하단에 있으니 잘 찾아보세욤ㅋㅋ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 저 파일을 받아서 보면 .project 파일이 없어서 아래 링크의 방법대로 Eclipse에 import 해야 하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bong8nim.com/post/programming/etc/project-%ED%8C%8C%EC%9D%BC-%EC%97%86%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-import-%ED%95%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/&quot;&gt;https://bong8nim.com/post/programming/etc/project-%ED%8C%8C%EC%9D%BC-%EC%97%86%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-import-%ED%95%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1614326960360&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;이클립스 .project 파일 없는 프로젝트를 import 해오는 방법&quot; data-og-description=&quot;이클립스에서 .project 파일 없는 프로젝트를 import 해오는 방법에 대해 적었습니다.&quot; data-og-host=&quot;bong8nim.com&quot; data-og-source-url=&quot;https://bong8nim.com/post/programming/etc/project-%ED%8C%8C%EC%9D%BC-%EC%97%86%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-import-%ED%95%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/&quot; data-og-url=&quot;https://bong8nim.com/post/programming/etc/project-파일-없는-프로젝트를-import-해오는-방법/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/beRrgL/hyJn2tpOq7/A8kaRSIM8hKULO0CsuFAi1/img.jpg?width=1240&amp;amp;height=807&amp;amp;face=0_0_1240_807,https://scrap.kakaocdn.net/dn/oFXan/hyJnZXMVpL/1MPHHM10w3qyWlM0Cn4Zf1/img.jpg?width=1346&amp;amp;height=890&amp;amp;face=0_0_1346_890,https://scrap.kakaocdn.net/dn/w6OT5/hyJpx6pQ09/GqBFDtRtKjjMTynjuDPut0/img.jpg?width=1240&amp;amp;height=807&amp;amp;face=0_0_1240_807&quot;&gt;&lt;a href=&quot;https://bong8nim.com/post/programming/etc/project-%ED%8C%8C%EC%9D%BC-%EC%97%86%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-import-%ED%95%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bong8nim.com/post/programming/etc/project-%ED%8C%8C%EC%9D%BC-%EC%97%86%EB%8A%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-import-%ED%95%B4%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/beRrgL/hyJn2tpOq7/A8kaRSIM8hKULO0CsuFAi1/img.jpg?width=1240&amp;amp;height=807&amp;amp;face=0_0_1240_807,https://scrap.kakaocdn.net/dn/oFXan/hyJnZXMVpL/1MPHHM10w3qyWlM0Cn4Zf1/img.jpg?width=1346&amp;amp;height=890&amp;amp;face=0_0_1346_890,https://scrap.kakaocdn.net/dn/w6OT5/hyJpx6pQ09/GqBFDtRtKjjMTynjuDPut0/img.jpg?width=1240&amp;amp;height=807&amp;amp;face=0_0_1240_807');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;이클립스 .project 파일 없는 프로젝트를 import 해오는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이클립스에서 .project 파일 없는 프로젝트를 import 해오는 방법에 대해 적었습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bong8nim.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사하게도, 위쪽의 내가 참고했다는 사이트의 두 번째 링크로 들어가보면 프로젝트를 바로 import 할 수 있게 convert 해 놓으셨다!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bkOQrY/btqYIkTrY5J/yiwDMWxVjiq7PKuQ7dceRK/Softhinker%20-%20eclipse.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Softhinker - eclipse.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.29MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Project Jo 님이 첨부하신 파일을 기준으로, 위의 파일을 압축해제 하고&lt;br /&gt;Eclipse &amp;gt; File &amp;gt; Import &amp;gt; Existing Projects into Workspace &amp;gt; 압축해제 된 폴더 지정 &amp;gt; Finish 하면, Import 가 완료된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2NxGI/btqYDk7HczA/LCs5naXWdLi3oJ3K6ALo3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2NxGI/btqYDk7HczA/LCs5naXWdLi3oJ3K6ALo3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2NxGI/btqYDk7HczA/LCs5naXWdLi3oJ3K6ALo3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2NxGI%2FbtqYDk7HczA%2FLCs5naXWdLi3oJ3K6ALo3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1386&quot; height=&quot;324&quot; data-origin-width=&quot;1386&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Import 된 프로젝트의 Test.java 파일을 열어보면 코드들이 적혀있는데 우리가 봐야 할 부분은 extractPrivateKey 함수를 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 보면 alias 와 password 변수가 있는데 &lt;b&gt;alias 에는 Vendor.p12의 Key Name, password 에는 Vendor.p12 를 내보내기 할 때 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;입력한 &lt;/b&gt;&lt;b&gt;암호&lt;/b&gt;를 입력해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cUcqqO/btqYDkfo1wT/H9SaaWEeR5wxfnUlAQgjm1/img.png&quot; width=&quot;645&quot; height=&quot;NaN&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/cUcqqO/btqYDkfo1wT/H9SaaWEeR5wxfnUlAQgjm1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하... 여기서 진행할 때 Key Name에 Vendor.p12를 입력해서 Run 할 때마다 오류나는 경험을 했는데, Key Name에는 파일명인 Vendor.p12가 아니라 키체인에서 개인 키를 내보낼 때 사진에 보이는 개인 키의 이름이 Key Name 이다...ㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 나를 예로 들면, Key Name은 Group Mobile 이 되겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 Terminal 에서도 확인해볼 수 있는데, Vendor.p12 파일이 있는 경로로 이동 후에, 아래 커맨드를 입력해주면!&lt;/p&gt;
&lt;pre id=&quot;code_1614329894025&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;keytool -list -keystore vendor.p12 -storeType PKCS12&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfa2St/btqYwgLWCCZ/qY4L8T7X7Vnu9gq8THQrJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfa2St/btqYwgLWCCZ/qY4L8T7X7Vnu9gq8THQrJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfa2St/btqYwgLWCCZ/qY4L8T7X7Vnu9gq8THQrJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfa2St%2FbtqYwgLWCCZ%2FqY4L8T7X7Vnu9gq8THQrJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;226&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진처럼 날짜 좌측에 Key Name이 뜹니다! 이걸 몰라서.. 2시간은 삽질을 한듯 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 본론으로 돌아오면, Key Name과 Key Password 를 변수에 잘 입력해주고, 한번 빌드하면 프로젝트 폴더안에 bin 폴더가 생긴다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yVvg6/btqYE7fMR6P/KemGdoUauB6pq117AMKSrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yVvg6/btqYE7fMR6P/KemGdoUauB6pq117AMKSrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yVvg6/btqYE7fMR6P/KemGdoUauB6pq117AMKSrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyVvg6%2FbtqYE7fMR6P%2FKemGdoUauB6pq117AMKSrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;298&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;안으로 안으로 따라 들어가서 사진에 나온것처럼 Test.class 가 있는 레벨에 우리가 준비한 5개의 파일들을 넣어준다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 프로젝트로 돌아가서 Run 해 준다. 정상적으로 실행이 되면..!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvmOZ9/btqYxoQvYjM/oUucQI0qDt46VwwQ4qEQs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvmOZ9/btqYxoQvYjM/oUucQI0qDt46VwwQ4qEQs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvmOZ9/btqYxoQvYjM/oUucQI0qDt46VwwQ4qEQs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvmOZ9%2FbtqYxoQvYjM%2FoUucQI0qDt46VwwQ4qEQs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;280&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요런, 파일들이 생성되는데 여기서 우리에게 필요한 파일은 &lt;b&gt;plist_encoded&lt;/b&gt; 파일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://identity.apple.com/pushcert/&quot;&gt;https://identity.apple.com/pushcert/&lt;/a&gt; 로 이동해서,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chbykg/btqYwhc2w97/oj7caFthUNmwfbEq1HkIB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chbykg/btqYwhc2w97/oj7caFthUNmwfbEq1HkIB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chbykg/btqYwhc2w97/oj7caFthUNmwfbEq1HkIB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fchbykg%2FbtqYwhc2w97%2Foj7caFthUNmwfbEq1HkIB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1590&quot; height=&quot;118&quot; data-origin-width=&quot;1590&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create a Certificate 를 클릭해서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLGguf/btqYIkFYl6t/nnDNb8Uam5lfII4GYWv9Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLGguf/btqYIkFYl6t/nnDNb8Uam5lfII4GYWv9Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLGguf/btqYIkFYl6t/nnDNb8Uam5lfII4GYWv9Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLGguf%2FbtqYIkFYl6t%2FnnDNb8Uam5lfII4GYWv9Pk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1904&quot; height=&quot;942&quot; data-origin-width=&quot;1904&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 선택 &amp;gt; plist_encoded 첨부 &amp;gt; Upload 를 클릭하면...!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wt7kW/btqYB4X8cjO/gddp4Ynr0YFKAifHmgLkG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wt7kW/btqYB4X8cjO/gddp4Ynr0YFKAifHmgLkG1/img.png&quot; data-alt=&quot;드디어...!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wt7kW/btqYB4X8cjO/gddp4Ynr0YFKAifHmgLkG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwt7kW%2FbtqYB4X8cjO%2Fgddp4Ynr0YFKAifHmgLkG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;598&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;드디어...!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 인증서를 다운로드 받고 키체인에 등록해주고, 키체인에서 검색창에 APSP 라고 검색해주면 뜨는 인증서가 MDM 인증서다!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NPwmm/btqYxphvq4a/ral8g5K4IVXBYXNAUUKKZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NPwmm/btqYxphvq4a/ral8g5K4IVXBYXNAUUKKZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NPwmm/btqYxphvq4a/ral8g5K4IVXBYXNAUUKKZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNPwmm%2FbtqYxphvq4a%2Fral8g5K4IVXBYXNAUUKKZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1734&quot; height=&quot;480&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ImCCx/btqYxqANrvL/YThYbIAEPAp81MdizjXYWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ImCCx/btqYxqANrvL/YThYbIAEPAp81MdizjXYWk/img.jpg&quot; data-alt=&quot;진짜 즐겁다 ^^&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ImCCx/btqYxqANrvL/YThYbIAEPAp81MdizjXYWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FImCCx%2FbtqYxqANrvL%2FYThYbIAEPAp81MdizjXYWk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;182&quot; height=&quot;527&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;진짜 즐겁다 ^^&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 처음에 MDM 인증서를 발급받을때 위의 방법대로 하지 않고, 글 초반에 내가 참고했다고 한 사이트 중 한 곳인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&quot;&gt;https://medium.com/developerinsider/how-to-create-a-verified-ios-mobile-device-management-mdm-profile-9d6739b92cc1&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이곳의 내용을 보고 MDM 인증서를 발급 했었는데 2021.02.25 일 기준으로 생성한 파일을 첨부해서 Upload 했더니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 Sign 되지 않았다는 내용과 함께 MDM 인증서 발급이 안됐다... 내가 잘못한 거 일수도 있는데 아마 안되는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나처럼 시행착오를 겪는 이가 없길 바라며... 글이 길어져서 MDM 프로파일 생성은 2편에서 진행해야겠다!&lt;/p&gt;</description>
      <category>iOS</category>
      <category>CSR</category>
      <category>ios</category>
      <category>MDM</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/11</guid>
      <comments>https://ch2n.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 26 Feb 2021 18:49:05 +0900</pubDate>
    </item>
    <item>
      <title>iOS 14, 앱 업데이트가 필요함 알림</title>
      <link>https://ch2n.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 iOS 오류 건 확인 중, 아래와 같은 알림이 뜬다는 요청이 들어왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qxJRJ/btqVRvJUYcR/rPPpzjAHocjnhOZTSUlIT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qxJRJ/btqVRvJUYcR/rPPpzjAHocjnhOZTSUlIT1/img.png&quot; data-alt=&quot;음...? 이건 뭐지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qxJRJ/btqVRvJUYcR/rPPpzjAHocjnhOZTSUlIT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqxJRJ%2FbtqVRvJUYcR%2FrPPpzjAHocjnhOZTSUlIT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;517&quot; height=&quot;347&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;음...? 이건 뭐지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 알림을 보자마자 '&lt;b&gt;이건 뭔 케이스지..?&lt;/b&gt;' 라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 저 알림이 뜬 이유가 Deprecated 된 메소드를 사용해서 그러나 싶었지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 내용을 보니 함께 첨부해준 Apple 문서 URL이 있어서 들어가봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612416342778&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&quot; data-og-url=&quot;https://developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/xcode/using_the_latest_code_signature_format&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 해당 문서의 내용은 &lt;span style=&quot;color: #333333;&quot;&gt;iOS 14.2 Beta 2 에서부터 새롭게 앱을 서명하는 방식이 추가 되었으니&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제부턴 새로운 앱 서명 방식을 이용해야 한다... 뭐 그런 얘기인 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서를 보면 터미널에서 codesign 커맨드를 이용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 앱이 재서명이 필요한지 여부를 확인할 수 있다고 해서 한번 확인 해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;codesign 커맨드를 사용해서 확인하려면 .app 파일이 필요한데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일은 .ipa 파일을 압축해제 하면 나오는 Payload 디렉토리 내에&amp;nbsp;있으니 먼저 압축해제 부터 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ch2n.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ch2n.tistory.com/7&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1612417137513&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;.IPA 파일을 통해 프로파일 및 배포 인증서 만료일 확인하기&quot; data-og-description=&quot;원하는 IPA 파일을 압축 해제 해야한다. 압축을 해제하는 방법에는 2가지 방법이 있는데, 편한 방법을 선택하면 된다. 방법 1 - UI IPA 파일을 우클릭하여 '아카이브 유틸리티' 로 열면 압축이 해제&quot; data-og-host=&quot;ch2n.tistory.com&quot; data-og-source-url=&quot;https://ch2n.tistory.com/7&quot; data-og-url=&quot;https://ch2n.tistory.com/7&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lZAKt/hyJae7XKeJ/XDN2cbtwRSFTUjFLin5Fek/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/TjHfO/hyJamZe7o2/UuxePBbvIzEdqfuTkoyQck/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/i5rel/hyJabckTXR/KoGSJB0xiK4MaN9C653bF1/img.jpg?width=334&amp;amp;height=292&amp;amp;face=0_0_334_292&quot;&gt;&lt;a href=&quot;https://ch2n.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ch2n.tistory.com/7&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lZAKt/hyJae7XKeJ/XDN2cbtwRSFTUjFLin5Fek/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/TjHfO/hyJamZe7o2/UuxePBbvIzEdqfuTkoyQck/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/i5rel/hyJabckTXR/KoGSJB0xiK4MaN9C653bF1/img.jpg?width=334&amp;amp;height=292&amp;amp;face=0_0_334_292');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;.IPA 파일을 통해 프로파일 및 배포 인증서 만료일 확인하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;원하는 IPA 파일을 압축 해제 해야한다. 압축을 해제하는 방법에는 2가지 방법이 있는데, 편한 방법을 선택하면 된다. 방법 1 - UI IPA 파일을 우클릭하여 '아카이브 유틸리티' 로 열면 압축이 해제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ch2n.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 압축해제 하는 방법을 모른다면 위의 게시물 내에 있으니 참고하시길...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 나온 Payload 디렉토리 내에 있는 파일을 터미널 Codesign 명령으로 한번 봐보자.&lt;/p&gt;
&lt;pre id=&quot;code_1612417285295&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;codesign -dv /path/to/MyApp.app&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커맨드를 입력하면 여러 내용들이 나타나는데 거기서 확인해야 하는 내용은&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xUVAT/btqVOruyAYH/eV3bvQ6Z7Oc3DPmrOK7XrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xUVAT/btqVOruyAYH/eV3bvQ6Z7Oc3DPmrOK7XrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xUVAT/btqVOruyAYH/eV3bvQ6Z7Oc3DPmrOK7XrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxUVAT%2FbtqVOruyAYH%2FeV3bvQ6Z7Oc3DPmrOK7XrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1114&quot; height=&quot;30&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;'v=20200'&amp;nbsp;&lt;/b&gt;이 부분만 확인하면 된다. 해당 값이 20400 보다 작다면 재서명이 필요한 앱이라고 문서에 나와있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 경우엔, 저 업데이트 해야 한다는 메세지가 뜬 이유는 재서명을 해야 되서 그런 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 재서명을 하려고 하는데, 솔직히 문서에 나온 내용이 잘 이해가 안간다 그래서 문서의 위쪽 내용을 보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS 10.14 이상에서 앱 서명을 한 경우엔 새로운 서명 방식이 적용이 되어 있을거라고 하길래, 그냥 앱을 최신 mac에서 빌드해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rV38w/btqVCbmBPau/890dA16vFiU0wFmMnsaGvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rV38w/btqVCbmBPau/890dA16vFiU0wFmMnsaGvK/img.png&quot; data-alt=&quot;이게 되네..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rV38w/btqVCbmBPau/890dA16vFiU0wFmMnsaGvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrV38w%2FbtqVCbmBPau%2F890dA16vFiU0wFmMnsaGvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1118&quot; height=&quot;34&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이게 되네..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시... macOS 10.14 이상 mac에서 앱을 재빌드 하면 바로 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끄읕&lt;/p&gt;</description>
      <category>iOS</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/10</guid>
      <comments>https://ch2n.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 4 Feb 2021 15:39:09 +0900</pubDate>
    </item>
    <item>
      <title>Apple Enterprise 앱 설치가 안되는 경우</title>
      <link>https://ch2n.tistory.com/9</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Apple Enterprise 계정으로 In-house 배포한 앱이 갑자기 설치가 안되는 오류가 얼마 전 발생했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;'앱 이름' 을(를) 설치할 수 없음 / 무결성을 확인할 수 없기 때문에 이 앱을 설치할 수 없습니다.&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;'앱 이름' 을(를) 설치할 수 없음 / 나중에 다시 시도하십시오.&lt;/b&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;b&gt;'앱 이름' 을(를) 실행할 수 없음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위 같은 문구가 뜨며 앱을 설치/실행 할 수 없는 오류였다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;하여, 해당 오류들이 발생하던 원인과 해결 방법에 대해 끄적여보려 한다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 인증서 / 프로파일&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 발생하던 .ipa 파일 빌드에 사용했던 인증서나 프로파일의 만료일을 확인해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서/프로파일의 만료일이 지난 경우엔 당연하게도 앱 실행이나 설치를 할 수가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일 어떤 것을 사용했는지 모르겠다면 .ipa 파일로도 확인 해 볼 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1607677126091&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;.IPA 파일을 통해 프로파일 및 배포 인증서 만료일 확인하기&quot; data-og-description=&quot;원하는 IPA 파일을 압축 해제 해야한다. 압축을 해제하는 방법에는 2가지 방법이 있는데, 편한 방법을 선택하면 된다. 방법 1 - UI IPA 파일을 우클릭하여 '아카이브 유틸리티' 로 열면 압축이 해제&quot; data-og-host=&quot;ch2n.tistory.com&quot; data-og-source-url=&quot;https://ch2n.tistory.com/7&quot; data-og-url=&quot;https://ch2n.tistory.com/7&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFVLqZ/hyIwxgWhll/kobAv1TsULbWvEHNpOZct0/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/bWB9P4/hyIwqvkrr8/CdieVvCLbzwXj9YyVdoMbK/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/bseKqt/hyIxphgQ9O/1g7JWUHdkPvp20eVvnuri1/img.jpg?width=334&amp;amp;height=292&amp;amp;face=0_0_334_292&quot;&gt;&lt;a href=&quot;https://ch2n.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ch2n.tistory.com/7&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFVLqZ/hyIwxgWhll/kobAv1TsULbWvEHNpOZct0/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/bWB9P4/hyIwqvkrr8/CdieVvCLbzwXj9YyVdoMbK/img.png?width=595&amp;amp;height=136&amp;amp;face=0_0_595_136,https://scrap.kakaocdn.net/dn/bseKqt/hyIxphgQ9O/1g7JWUHdkPvp20eVvnuri1/img.jpg?width=334&amp;amp;height=292&amp;amp;face=0_0_334_292');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;.IPA 파일을 통해 프로파일 및 배포 인증서 만료일 확인하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;원하는 IPA 파일을 압축 해제 해야한다. 압축을 해제하는 방법에는 2가지 방법이 있는데, 편한 방법을 선택하면 된다. 방법 1 - UI IPA 파일을 우클릭하여 '아카이브 유틸리티' 로 열면 압축이 해제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ch2n.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 서버에 있는 .plist&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Enterprise 앱 설치를 위해선 .plist 파일을 통해 앱의 정보, .ipa 파일 경로등을 적어주는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.plist 파일의 내용이 잘못 된 경우엔 앱 설치를 할 수가 없으니 아래 항목들을 검토해보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL의 프로토콜은 무조건 https 여야만 한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;bundle-identifier 에 입력된 번들명이 정확해야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;title 에 입력된 앱 이름을 한글로 입력한 경우, 해당 문자열이 깨지진 않았는지 확인한다.( Notepad++ 추천)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3) Xcode Build Setting&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 위의 두 개 오류가 대부분 이였고, 사내 테스트 기기에선 문제가 없었기에 Xcode Build 환경에 문제가 있을거라곤 생각도 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 Build Setting 들이 문제를 일으키는지는 아직은 잘 모르겠지만, 내가 겪었던 문제는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Xcode &amp;gt; Targets &amp;gt; Build Setting &amp;gt; Product Name 이 한글&lt;/b&gt;로 되어 있었는데 이게 설치가 안되는 범인이였다...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 이게 앱이 설치/실행이 잘 되다가 갑자기 어느 순간부터 안되서 앱에 문제가 있을거라곤 생각도 못해 나흘간 삽질한 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 할 땐 웬만해서 한글을 사용하지 않는게 정신 건강에도 앱 실행에도 이로운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 알고 계시는 오류 원인 등이 있으면 댓글로 남겨주세요 :)&lt;/p&gt;</description>
      <category>iOS</category>
      <category>APP</category>
      <category>Apple</category>
      <category>enterprise</category>
      <category>Not Install</category>
      <category>Xcode</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/9</guid>
      <comments>https://ch2n.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 14 Dec 2020 14:41:50 +0900</pubDate>
    </item>
    <item>
      <title>.IPA 파일을 통해 프로파일 및 배포 인증서 만료일 확인하기</title>
      <link>https://ch2n.tistory.com/7</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;.IPA 파일을 이용해서 프로파일 및 인증서 만료일을 확인하기 위해선 해당 IPA 파일을 압축해제 해야한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2L02h/btqEEMBPugR/gIrqX13kSFwgzLYL5mK3q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2L02h/btqEEMBPugR/gIrqX13kSFwgzLYL5mK3q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2L02h/btqEEMBPugR/gIrqX13kSFwgzLYL5mK3q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2L02h%2FbtqEEMBPugR%2FgIrqX13kSFwgzLYL5mK3q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;148&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1612421168481&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;unzip -q 파일명.ipa&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;터미널에서 해당 .ipa 파일을 위의 커맨드를 이용하여 압축해제 하면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/unbij/btqEBPmZ1qP/ZCAd7aKle2zro7u15toh7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/unbij/btqEBPmZ1qP/ZCAd7aKle2zro7u15toh7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/unbij/btqEBPmZ1qP/ZCAd7aKle2zro7u15toh7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Funbij%2FbtqEBPmZ1qP%2FZCAd7aKle2zro7u15toh7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;417&quot; height=&quot;110&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt; 압축을 풀고 나면 &lt;b&gt;Payload&amp;nbsp;&lt;/b&gt;디렉토리와 그 안에 패키지 파일이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;배포 프로파일 만료일 확인&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTJkpO/btqECNaSORC/C4TTn2TtynGhM5JjymCkX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTJkpO/btqECNaSORC/C4TTn2TtynGhM5JjymCkX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTJkpO/btqECNaSORC/C4TTn2TtynGhM5JjymCkX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTJkpO%2FbtqECNaSORC%2FC4TTn2TtynGhM5JjymCkX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;90&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NVTEp/btqECibnIOA/TH98YxzIdfaEZ10p1kYhq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NVTEp/btqECibnIOA/TH98YxzIdfaEZ10p1kYhq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NVTEp/btqECibnIOA/TH98YxzIdfaEZ10p1kYhq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNVTEp%2FbtqECibnIOA%2FTH98YxzIdfaEZ10p1kYhq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;590&quot; height=&quot;94&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1IgAc/btqEEgiQ506/WdnmMdKdTRMkqOdjsZvgb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1IgAc/btqEEgiQ506/WdnmMdKdTRMkqOdjsZvgb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1IgAc/btqEEgiQ506/WdnmMdKdTRMkqOdjsZvgb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1IgAc%2FbtqEEgiQ506%2FWdnmMdKdTRMkqOdjsZvgb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;86&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;패키지 파일을 우클릭 해서 &lt;b&gt;'패키지 내용 보기'&lt;/b&gt; 를 하면 나오는 파일 리스트에서&amp;nbsp;&lt;b&gt;embedded.mobileprovision&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;파일을 찾는다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1612421372947&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;security cms -D -i 프로파일 경로&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 파일과 위의 커맨드로 배포 프로파일의 정보를 확인 할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;출력 된 정보 중 &lt;b&gt;ExpirationDate&amp;nbsp;&lt;/b&gt;의 date 값이 배포 프로파일의 만료일이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;배포 인증서 만료일 확인&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;배포 인증서 만료일 확인은 생각 외로 간단하다..!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;terminal 에서 &lt;b&gt;Payload &lt;/b&gt;디렉토리로 이동 후 아래의 커맨드만 입력해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1591322625753&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ codesign -d --extract-certificates Payload/*.app
$ openssl x509 -inform DER -in codesign0 -noout -nameopt -oneline -dates&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Eympv/btqED0N8Q6k/xno8f4a5zIRw1jnga6jYr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Eympv/btqED0N8Q6k/xno8f4a5zIRw1jnga6jYr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Eympv/btqED0N8Q6k/xno8f4a5zIRw1jnga6jYr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEympv%2FbtqED0N8Q6k%2Fxno8f4a5zIRw1jnga6jYr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;85&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정상적으로 실행되면 위의 사진과 같은 결과가 출력되는데, &lt;b&gt;notAfter =&amp;nbsp;&lt;/b&gt;에 적혀있는 날짜가 배포 인증서의 만료일이다.&lt;/p&gt;</description>
      <category>iOS</category>
      <category>Distribution Certificate</category>
      <category>ios</category>
      <category>Provisioning Profile</category>
      <author>따봉냥이</author>
      <guid isPermaLink="true">https://ch2n.tistory.com/7</guid>
      <comments>https://ch2n.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 5 Jun 2020 11:08:51 +0900</pubDate>
    </item>
  </channel>
</rss>