Xcode No matching provisioning profiles found 해결

xcode_provisioning_profile_error

XCode를 사용하다 보면 인증서가 꼬이는 문제를 종종 겪곤 합니다. 그런데 간혹 보면 XCode만으로는 이 문제를 해결할수가 없는 경우가 많아 해결 과정을 정리해 봅니다. 우선 빌드시에 제가 겪은 오류는 다음과 같습니다. 아마 다른 문제도 이와 같은 방법으로 해결이 가능할 것입니다.

No matching provisioning profiles found

Your build settings specify a provisioning profile with the UUID “8a0b43d9-d75b-4d24-9a12-966256f20cb6”, however, no such provisioning profile was found. Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.

빌드시에 위와 같은 문제가 발생하면 가장 먼저 확인해 보셔야 하는것은 다음과 같습니다.

  • Build Settings > Code Signing Identity에 개발자 선택이 제대로 되어있는가?
  • Build Settings > Provisioning Profile에 현재 프로젝트에 적합한 프로비저닝이 선택되어있는가?
  • Info > Bundle Identifier에 프로비저닝에서 설정한 AppId의 Identifier와 동일한가?

아마 이글을 보고 계시는 분들이라면 위와 같은 부분들은 이미 확인하셨고 굳이 프로비저닝이 잘못된것은 아닐까에 대한 의심은 하지 않아도 될꺼 같습니다. 그렇다면 이제 XCode의 바보짓에 대해서 확인해 봅시다. 빌드 에러를 잠시 확인해 보자면 다음과 같은 메시지를 확인할 수 있습니다.

Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “8a0b43d9-d75b-4d24-9a12-966256f20cb6”, however, no such provisioning profile was found.

보면 위와같은 UUID를 가진 프로비저닝 프로필을 찾을 수 없다고 하는군요. 정말로 찾을 수 없는지 확인해 보겠습니다. 터미널에 가서 다음의 경로에 들어가서 이미 설치되어있는 프로비저닝 프로필들을 확인합시다.

$ cd ~/Library/MobileDevice/Provisioning\ Profiles/
$ ls
bef0fef2-6f6c-44af-9c14-1e176b082c93.mobileprovision

제가 테스트 한답시고 설치되어있던 프로필을 모두 삭제해서 하나밖에 없는데요, 저 파일명이 프로비저닝 프로필의 UUID에 해당합니다. 대충 봐도 8a로 시작하는 프로비저닝 프로필은 없다는것을 확인할 수 있습니다. XCode상에서 저 프로비저닝 프로필의 이름이 무엇인지 확인하시려면 다음의 명령을 사용하여 확인할 수 있습니다.

$ openssl smime -in bef0fef2-6f6c-44af-9c14-1e176b082c93.mobileprovision -inform der -verify

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AppIDName</key>
	<string>TheEye ExampleApp</string>
	<key>ApplicationIdentifierPrefix</key>
	<array>
	<string>2BPAH2RJ5A</string>

...

이쯤되면 저 프로비저닝 프로필은 유효하고 내가 이 프로비저닝 프로필로 빌드를 하려했다는것을 알 수 있습니다. 하지만 XCode는 쌩뚱맞게 8a로 시작하는 프로비저닝 프로필이 없다고 오류를 내고 빌드를 종료시키는군요. 지금부터는 XCode의 도움을 받지 않고 문제를 해결해 보겠습니다. 우선 XCode를 종료합시다.

프로젝트의 디렉토리에 방문하여 {ProjectName}.xcodeproj 디렉토리 안의 project.pbxproj 파일을 한번 조사해 보겠습니다.

$ grep 'PROVISIONING_PROFILE' project.pbxproj 
PROVISIONING_PROFILE = "9d26064d-a782-4349-a97a-c53a9803ee06";
PROVISIONING_PROFILE = "9d26064d-a782-4349-a97a-c53a9803ee06";
PROVISIONING_PROFILE = "8a0b43d9-d75b-4d24-9a12-966256f20cb6";
PROVISIONING_PROFILE = "8a0b43d9-d75b-4d24-9a12-966256f20cb6";

PROVISIONING_PROFILE 이라는 키워드로 프로비저닝 프로필 설정이 되어있습니다. 위에서 보니 8a로 시작하는 프로비저닝 프로필이 설정에 떡하니 있군요. 이제 project.pbxproj 파일을 편하신 텍스트 에디터로 열어서 위의 값을 아까 우리가 사용하려뎐 bef로 시작하는 프로비저닝 프로필로 바꿔줍니다. 그리고 다시 XCode에서 열어서 프로젝트를 빌드해보면 잘 되는것을 확인하실 수 있습니다.