1

iOS 앱이 개발 또는 배포 인증서로 서명되었는지 여부를 알 수 있는지 여부를 알고 싶습니다.iOS 앱이 개발 인증서 또는 배포 인증서로 서명되었는지 여부를 확인하는 방법은 무엇입니까?

iOS 앱이 번들의 정보 사전에 액세스하여 자체 메타 정보를 가져올 수 있음을 발견했습니다. 예를 들어 사전에서 CFBundleVersion 키를 읽으면 버전을 검색 할 수 있습니다. 서명 인증서 정보를 가져 오는 것과 비슷한 것이 있습니까?

내가 물어 보는 이유는 APNS 때문입니다. 내 앱이 클라우드 서버에 APNS 장치 토큰을 등록하면 클라우드 서버는 해당 프로덕션 APNS 서버 ("api.push.apple.com") 또는 개발 APNS 서버 ("api.push.apple.com")를 호출하여 해당 토큰에 대한 푸시 메시지를 생성해야하는지 여부를 알아야합니다. "api.development.push.apple.com".

+0

APNS 설정은 서명 인증서가 아닌 인 타이틀먼트에 저장됩니다. 'codesign '도구의 소스를 보셨습니까? – Mats

+0

코드 쉐어 (codeign) 도구의 소스를 보지 않았습니다. 수급권에 대한 귀하의 발언은 흥미 롭습니다. 내 프로젝트에 확장명이 ".entitlement"인 파일이 있다는 것을 알았습니다. 이 파일은 "APS Environment"키의 값이 "development"임을 지정합니다. 따라서 앱에서 해당 정보에 액세스하는 것이 내 문제의 해결책이기도합니다. 나는 Swift 코드에서 프로그램 적으로 정보를 얻는 법을 (아직) 모르지만이 힌트를 주셔서 감사합니다! –

+0

값은 코드 서명 빌드 단계에서'development' 또는'production'으로 설정됩니다. 이는 코드 서명 인증서 및 프로비저닝 프로파일에 따라 다릅니다. – Mats

답변

0

APNS 서버에 대한 정보는 바이너리의 코드 서명 섹션에 있습니다. 기본 단계는 다음과 같습니다.

  1. dladdr에서 이진의로드 주소를 가져옵니다.
  2. 에 대한 모든 Mach-O로드 명령을 반복하십시오. codesign 도구와 같은 방법으로 코드 서명 명령을 구문 분석하십시오. opensource.apple.com에서 오픈 소스입니다.
  3. 권한 부여 plist-data를 구문 분석하십시오.
  4. aps-environment 값을 추출하십시오.

이것은 기본적으로 바이너리에서 codesign -d --entitlements :- 명령을 실행하는 것과 같습니다.

관련 문제