2014-02-27 3 views
40

Xcode의 기본 SenTest 프레임 워크를 사용하여 키 체인을 읽고 변경하는 코드를 테스트하려고합니다. 코드는 기기에서 제대로 작동하지만 테스트를 시작할 때 SecItemDelete/SecItemAdd/등으로 키 체인을 터치 할 때마다 이러한 오류가 발생합니다.키 체인 테스트 - OSStatus 오류 -34018

The operation couldn’t be completed. (OSStatus error -34018 - client has neither application-identifier nor keychain-access-groups entitlements)

나는 빌드 대상 및 시험 대상 모두에 대한 와일드 카드 프로비저닝 프로파일 (iOS Team Provisioning Profile: *)을 일치했다.

이 (미확인) 스택 오버플로 답변 :

Read from keychain results in errSecItemNotFound 25300

내가 내 응용 프로그램 식별자 내가 키 체인을 사용할 때마다 일치하는 프로비저닝 프로파일이 필요하다고 말하지만, 그 오른쪽이 될 수 없습니다, 아니면 ' 테스트 대상 밖에서 같은 오류가 발생합니다. 여기에 (미확인) 답변, 깊이를 파고

:

SecItemAdd and SecItemCopyMatching returns error code -34018 (errSecMissingEntitlement)

솔직히 무서운 더 일반적으로 Security.framework 키 체인 내에서 버그,있을 수 있음을 의미한다.

내 질문은; 누구든지 OSStatus 오류가 발생했습니다 - 04030 테스트 대상에있을 때만 해당합니까? 그것은 내가 보는 행동 인 것처럼 보입니다.

편집 : this answerJorgeDeCorte을 아래의 답변에 사용하십시오.

이 스레드는 문제가 유닛 테스트 대상에서 종료 된 경우 해결 방법이 포함 된 것으로 보입니다.

https://devforums.apple.com/message/917498#917498

은 기본적으로 당신은 테스트 대상의 실행 스크립트로 다음 를 추가하여 .xcttest 폴더를 통합 설계해야합니다. 장치 내 키 체인을 테스트 할 때

codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH"

나는 -34018 많은 오류를 가지고와이 문제를 해결할 수 있었다.

문제가 테스트 대상에 없다면 이는 아마도 해결책이 아닙니다.

그래서 해결책은 다음과 같습니다. 테스트 대상에 서명하십시오.

답변

6

질문에 대답하려면 : 예, 같은 문제가 발생합니다. 그것은 내 애플 리케이션을 실행할 때 잘 작동하는 것 같다. 그러나 내 장치에서 XCTest를 실행하면 키 체인이 오류 -34018을 반환하는 것으로 보입니다. 이상한 점은 시뮬레이터에서 테스트를 실행할 때 발생하지 않는다는 것입니다.

편집 : 나는 그것을 어떤 경우에는 소리로 .xctest 번들이 쉽지 않다 Codesigning in this answer

+10

링크가 끊어진 경우를 대비하여 링크 된 솔루션을 설명해 주시겠습니까? 또는 클릭을 통해 찾을 필요가 없습니다. ... – newenglander

1

을 설명했다 해결책을 발견했다.기본적으로 JorgeDeCorte는 그의 answer과 함께 주어진 단축 라인이 Run Script으로 대부분의 개발자에게 충분하다고합니다.

codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH" 

그러나 당신이 당신의 키 체인에 인증서가 여러 개있을 때이 다음 줄

iPhone Developer: ambiguous (matches "iPhone Developer: Your Name (ABC123DEF45)" and "iPhone Developer: Your Name (123ABC456DE)" 

으로도 여러 사람과 올바른 인증서를 얻을 수있는 솔루션을 실패는이 짧은 스크립트입니다. 확실히 이것이 이상적은 아니지만 제 지식으로는 Xcode가 발견하여 .app에 서명하는 데 사용할 인증서를 얻을 기회가 없습니다.

echo "codesign --verify --force --sign \"$CODE_SIGN_IDENTITY\" \"$CODESIGNING_FOLDER_PATH\"" 
IDENTITIES=`security find-identity -v -s "Code Signing" | grep "iPhone Developer" | awk '{ print $2 }'` 

for SHA in $IDENTITIES; do 
    codesign --verify --force --sign $SHA "$CODESIGNING_FOLDER_PATH" 
    if [ $? -eq 0 ]; then 
     echo "Matching identity found: $SHA" 
     exit 0 
    fi 
done; 

exit 1 
4

그랜드 센트럴 디스패치를 ​​통해 키 체인 작업을 실행하려고하면이 오류가 발생합니다. 기본 스레드에서 키 체인 (또는 키 체인 래퍼)을 인스턴스화하는 방법을 찾으십시오.

//results in code -34018 
    static dispatch_once_t token; 
    dispatch_once(&token, ^{ 
     keychain = [[KeychainWrapper alloc] init]; 

    }); 

//works fine 
keychain = [[KeychainWrapper alloc] init]; 
+1

메인 스레드에서 실행 중일 때이 오류가 발생했습니다. – Greg

1

"OSStatus 오류 -34018"도 있습니다. 프로비저닝 프로파일을 다시 작성하여 문제를 해결했습니다.