반응형

내 살다살다 이런 경우는 또 처음 경험하게 된다.
보통 xcode에 device를 연결하면 자동으로 애플쪽 device에 등록을 시키고 빌드 / 앱 설치가 가능하다.
그런데 어제부터 특정 시점부터 아래와 같은 오류를 내뱉으며 앱이 실장비 아이폰에 설치가 되지 않기 시작했다.

There is a problem with the request entity: A device with number '00008110-000000000' already exists on this team

Provisioning profile "iOS Team Provisioning Profile: com.mydomain.www doesn't include the currently selected device "iPhone 15" (identifier 00008110-000000000).

developer.apple.com의 devices list에 가봐도 다른 개발 아이폰들은 전부 STATUS가 정상이지만 특정 시점 이후의 아이폰들은 모두 Processing으로 떠있었다.

상단에 친절하게 파란색 영역으로 24시간부터 72시간 정도 걸리네 어쩌네가 있지만 크게 신경은 쓰지 않았다.
왜냐? 10년 넘게 아이폰 개발을 하면서 보통 이런 경우는 프로비저닝 인증서가 문제이거나 기타 애플스러운 오류였기 때문이었다.
더군다나 이번 iOS17이 출시되면서 xcode를 업그레이드 하고나니 pods까지 말썽을 일으켜 12에서 13으로 버전을 업그레이드해야 했으며 이때 pod update가 제대로 먹지 않아 Ruby까지 버전업을 시키는 등 갖은 고초를 겪은 후였다.
느닷없이 firebase쪽 pods에 DT_TOOLCHAIN_DIR 이따위 오류가 나질 않나...

참고로 cocoapods를 12에서 13으로 upgrade시키는 방법은 https://stackoverflow.com/questions/77133579/dt-toolchain-dir-cannot-be-used-to-evaluate-library-search-paths-use-toolchain 를 참고하기 바란다.
물론 위에 적었듯이 Ruby도 업그레이드 해야 하는데 실제 사용하는 system버전도 바꿔줘야 하고 cocoapods를 13으로 upgrade해줘도 이게 version을 확인해보면 여전히 12가 나타나고.. 사람을 애 먹인다.
하지만 기본 방법은 저 방법으로 진행하는게 맞는듯 싶다.
brew upgrade cocoapods
sudo gem install cocoapods
그리고 구글링으로 자주 검색되어 나오는 해결 방법들 중 단골 방법으로 임시방편을 알려주며 Podfile에서 13.0을 12.0으로 바꿔주라는 방법이 검색될텐데 무시해라.
cocoapods가 이미 13버전이 있으므로 삽질해가며 13버전으로 cocoapods를 올리면 그만이다.

  post_install do |installer|
      installer.pods_project.targets.each do |target|
          target.build_configurations.each do |config|
          config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
        end
      end
    end



여하튼 앱을 직원들 폰에 테스트를 위해 설치해야 하는데 devices쪽에 등록이 안되고 빌드도 덩달아 해당 폰에 안되고 계속 남의 폰을 붙잡고 있을수도 없는 노릇이라 눈치가 보였지만 여러번 시도하다 어느순간 갑자기 빌드가 되었다.
애플 개발자 사이트에 접속해보니 아니나 다를까 Processing이던 상태값이 모두 사라졌다.

그리고 발견한 내용 -_-
이런 귀여운 애플 녀석들을 보았나.

https://developer.apple.com/help/account/reference/device-registration-updates/

 

Reference - Account - Apple Developer

Reference Device registration updates You need a registered device to create a development or ad hoc provisioning profile. To register a device using your developer account, you need to have the device name and device ID. Temporary processing and ineligibl

developer.apple.com

Temporary processing and ineligible test device status

Enabling registered test devices may require additional processing for new Apple Developer Program memberships or memberships renewed after expiration for one month or more. Although the device is registered during this time, the device identifier won’t be included in provisioning profiles until processing completes. Existing active memberships are not impacted by this change.

Device registration behavior

Registered test device count (per platform)Timeframe*
1 to 10 Upon registration
11 to 100 Within 24 to 72 hours

* Devices may be moved to an ineligible status for up to 30 days if the Provisioning Device Identifier was previously associated to memberships that were terminated for violating the Apple Developer Program License Agreement.

10대까진 바로 디바이스를 등록해주지만 최대치인 100개까진 등록은 해주지만 최소 하루 이상 기다리게 만든다란 내용이다.
이런 내용은 devices list에 링크를 이동시켜주던가 좀 더 자세히 알려주던가.
하여간 양놈들 일처리 방식은 (그나마 구글보단 양반이긴 하다만)

그동안 아이폰 개발을 하며 개발 디바이스를 아무리 많이 사용해도 3대 이상 사용해본적 없었는데 이번 회사에선 10여대를 설치하니 이런 삽질을 하게 되었다.

10대 이상 디바이스를 등록하려면 11대부터는 하루 기다려라.

사족으로 ruby 업그레이드 하는 방법은 이 블로그 참고하기 바람
https://ios-development.tistory.com/1202

 

rbenv를 이용한 ruby 버전 관리 방법 (with gem, bundler)

rbenv ruby 버전 관리를 할 때 사용하는 패키지 rbenv말고도 RVM으로도 ruby를 사용할 수 있지만, RVM이 기능이 많지만 rbenv가 더욱 가벼운 장점이 존재 MacOS를 설치하면 ruby가 내장되어 있지만, ruby 프로

ios-development.tistory.com

% rbenv -v
zsh: command not found: rbenv

% brew install rbenv ruby-build

현재 설치된 ruby 버전 확인
ruby -v

설치하고싶은 ruby 버전 목록 확인
rbenv install -l

원하는 버전 설치
rbenv install 3.0.5

설치한 3.0.5로 글로벌, 로컬 설정
rbenv global 3.0.5
rbenv local 3.0.5

대충 이런식이라는데 버전이야 계속 올라가니 그에 맞게 설치하면 됨.

반응형
Posted by Hippalus
,

반응형

애플이 그간 한번도 진행하지 않았던 인증서 갱신 작업을 발렌타인 데이인 2월 14일에 강행하였다.

아침에 출근하여 앱 업데이트를 진행하니 Xcode에선 정보를 import하던지 멤버센터에 방문하라 한다.

애플 멤버센터에 가보아도 모든 인증서는 정상 동작중이었고 만료기간도 남아있었다.


키체인에 가보니  인증서가 유효하지 않은 발급자를 가지고 있음 이라는 에러를 내뱉고 있었다.

해당 인증서를 삭제하니 앱마다 기존에 발급받았던 모든 인증서, 프로비져닝 프로파일, 푸시 인증서등이 모두 사용할 수 없게 되었다.



애플 개발자 센터에 연락을 해보니 

멤버센터 > Certificates > 우측 +를 눌러 나오는 하단의 메뉴에서 WDRCA파일을 다시 받아 설치하면 된다 말한다.

Intermediate Certificates

To use your certificates, you must have the intermediate signing certificate in your system keychain. This is automatically installed by Xcode. However, if you need to reinstall the intermediate signing certificate click the link below:


하지만 여전히 그래봐도 유효하지 않은 발급자 문제는 해결되지 않았다.

키체인에서도 기존에 문제가 되는 모든 인증서를 다 제거해보아도 여전히 이 인증서는 유효하지 않은 발급자를 가지고 있음 문제는 지속되었다.



알고 보니 키체인에 로그인 메뉴 말고 시스템 메뉴에서도 만료된 인증서를 모두 삭제해 줘야 했다.




하.... 지금은 애플개발자센터의 답변을 기다리고 있다.

애플에 의해 이런 현상이 또 재발하면 기존의 모든 인증서를 폐기하고 재발급 받아야 하는지

아니면 그냥 WDRCA 파일만 교체하면 되는지...


애플 덕분에 오전 시간 다 날리고 이제 오후부턴 모든 인증서를 다 발급 받게 되버렸다.

(혹 이 사태가 지난 보안 이슈 때문은 아닌가 싶다.)


아래는 이번 사건과 관련된 stackoverflow의 질의 응답이다.


http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services/35399656#35399656



정리


1.기존에 만료된 인증서 키체인에서 모두 삭제(로그인, 시스템 메뉴 두곳에 있음)

2.멤버센터에서 갱신된 Worldwide Developer Relations Certificate Authority 파일 받아 더블클릭으로 키체인에 추가

3,혹시 모르니 리부팅


이후 재발급


반응형
Posted by Hippalus
,

반응형

쌀중의 쌀 닝기미

언제부턴가 갑자기 푸시가 날라가질 않음

앱소스가 바뀐것도 아니고 developer.apple.com에서 발급받은 인증서가 바뀐것도 아님.

그런데 안됨.


JAVA로 만든 푸시 서버는 계속 아래와 같은 오류만 뱉음

remote host closed connection during handshake apns


원래 키체인에서 p12파일 추출하면 되던게 아무리 인증서를 다시 발급받고 푸시 인증서를 재발급 받아도 안됨

찾아보니 닝기미 뭐가 꼬인건지 아래와 같이 해야만 발송됨


1.기본적인 인증서 발급과정은 동일함.

developer.apple.com > member center > Identifiers > App IDs > 푸시 설정할 앱 선택 > 



CSR파일을 통해 푸시 인증서 발급 후 다운로드

다운로드 받은 후 실행



응용프로그램 > 유틸리티 > 키체인 실행 후 애플개발자사이트의 app id로 인증서가 등록되었는지 체크

중요 : 인증서 옆에 삼각형이 반드시 표시되어야 함!



삼각형이 없다면 키체인에 등록된 개발자 인증서(개발용과 배포용)를 모두 지워버린 후 developer.apple.com > member center > Certificates로 이동하여 개발용, 배포용 인증서를 다시 만듬.

이때 CertificateSigningRequest.certSigningRequest 파일이 필요한데 이 파일도 그냥 다시 만들어버리면 됨.

만드는 방법은 키체인 > 키체인 접근 > 인증서지원 > 인증 기관에서 인증서 요청메뉴에서 CSR파일을 생성하면 됨



이때 또 중요한점!

사용자 이메일 주소는 애플 개발자로 등록된 이메일이고 일반이름은 아무거나 입력하면 됨.

요청항목은 CA로 이메일 보냄이 아닌 디스크에 저장됨 라디오 버튼 선택 후 본인이 키 쌍 정보 지정을 반드시 체크해줘야 함!

더럽게 복잡하고 지저분한 애플 인증서 발급 시스템! 망해라 애플!



다시 올아와 키체인에 등록된 인증서 옆에 삼각형이 있음을 확인된 경우

삼각형을 눌러 인증서와 키(열쇠) 2개 행을 모두 선택하여 2개 항목 보내기 하면 암호를 물어보고 암호를 알아서 입력하면 p12파일이 생성됨

원랜 이 상태로 JAVA APNS에서 사용하면 되는데 이게 안먹힘!!!

remote host closed connection during handshake apns

이 p12파일로 푸시 테스트를 하면 이 메세지가 뜸! ㅅㅍㅅㅍㅅㅍㅅㅍ 망해라 애플!


2.이제부터 해결책을 제시함

일단 p12가 추출되었다면 

다운받은 인증서 developer_identity.cer 파일을 같은 폴더 안에 놓고

p12파일은 편의상 mykey.p12로 이름을 바꿔주고

cer파일은 developer_identity로 이름을 바꿔줌

(안바꿔줘도 되지만 안바꿔주려면 아래 터미널에서 실행할 명령어를 알아서 바꿔주길)


터미널을 실행시킴

인증서와 p12파일이 존재하는 폴더로 이동함.

이동하는 방법은 터미널에서 cd라고 치고 한칸 띄고 finder에서 그냥 해당 폴더를 드래그 드롭 하면 알아서 경로가 셋팅됨. 엔터만 치면 됨

참 쉽죠~?  망해라 애플!


이제부턴 터미널에서 다음과 같이 입력함

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM

openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem

openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12


참고로

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM 를 입력하면 그냥 커맨드가 실행되고 아무런 변화가 없음

openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem 를 입력하면 암호를 계속 물어보는데 이때 앞서 p12파일 추출할때 입력한 암호를 계속 입력하면 됨



openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12 를 입력하면 또 마찬가지로 암호를 요구하므로 또 p12파일 추출할때 입력한 암호를 입력하면 됨


이제 끝임

이과정까지 끝내면 드디어 p12파일이 생성됨

파일 이름은 iphone_dev.p12 파일임.


이 파일을 JAVA APNS 프로그램에서 사용해야 함.

이름은 알아서 바꿔주면 됨.

아직 테스트는 안해봤지만 개발용 p12말고 실서비스도 마찬가지일거라 판단됨.

이 무슨 80년대식 인증서 발급 쌩쑈인가!

애플의 작태가 이해가 안됨.

푸시 발송을 좀 간소화 하면 안되나? 망해라 애플!


이상 애플 푸시 인증서 발급 부터 open SSL을 통한 p12파일 추출 끝

다시한 번 외쳐본다.


망해라 애플!


반응형
Posted by Hippalus
,

반응형

애플이 망조가 들었는지 요즘 헛발질이 너무 잦습니다.

Xcode로 손쉽게 앱을 업로드 할 수 있지만 가끔가다 이런 오류를 내뱉더니 이번 Xcode7 이후 첫 업로드는 몇번을 해도 도무지 될 생각이 없습니다.


찾아보니 개발사 커뮤니티에서도 유사한 증상을 호소하는 개발사들이 많은것으로 확인되기에 이번 itunesconnect.apple.com 개편 이후 뭔가 꼬였나 봅니다.

상황이 이러하니 앱 심사를 더이상 미룰 수 없기에 Application Loader를 통해 업로드를 시도한 결과 다행히 앱이 정상 업로드 됨을 확인 할 수 있었습니다.


일단 Application Loader(어플리케이션 로더)를 통해 올리려면 ipa파일을 생성해내야 합니다.

Xcode > Product 메뉴 > Archive를 눌러줍니다. (여기까진 Xcode로 앱스토어 심사 업로드 방식과 동일)


Upload to App Store... 버튼 대신 Export를 눌러줍니다.


그럼 ipa파일을 저장할 폴더를 선택할 수 있습니다.

전 바탕화면에 저장하였습니다.


Application Loader를 실행시켜줍니다. 

Application Loader가 없다면 itunesconnect.apple.com의 심사 파일 선택하는 곳에서 다이렉트 다운로드 링크가 존재하니 해당 링크를 통해 설치 하면 됩니다.(정상 설치하였다면 Finder의 응용프로그램 폴더 안에서 찾을 수 있습니다.)

설치가 되었단 가정하에 실행하면 요런 화면이 실행됩니다.



App 전송을 눌러 앞서 저장했던 ipa파일을 선택하여 전송합니다.

그럼 아래처럼 iTunes Store로 업로드가 됩니다.



그런데

말입니다.

예전엔 (약 한달 전 까지만 해도) Xcode든 Application Loader든 업로드를 하면 10분내로  파일을 선택할 수 있었는데 말입니다.

이번엔 좀 다릅니다. 10분이 지나도 계속 처리 중 이란 상태가 지속됩니다. 50분동안~




구글링을 해보면 "처리 중" 상태가 지속된다란 고통을 호소하는 프로그래머 성님들의 절규를 발견할 수 있었습니다.

http://stackoverflow.com/questions/27928471/my-prerelease-app-has-been-processing-for-over-a-week-in-itunes-connect-what

(이런 경우가 전 처음이라 당황했지만 이 분은 하루가 지나도록 감감 무소식이라더군요. ㄷ ㄷ ㄷ)


애플 개발자 센터에 전화로 문의를 하였더니 원래 24시간 정도 걸릴 수 도 있다고 하더군요.

그러며 혹시 모르니 사파리로 해보았느냐 묻길래

gateway 446 떠서 크롬으로 했다고 답하니

이리 저리 묻더니 스크린샷을 보내달라 하더군요. 하지만 여기서도 애플의 갑질은 또 반복됩니다.

반드시 사파리로 실행한 스크린샷을 보내야만 한다합니다. 대애애애박!~

하여 사파리로 하는 차에 우연하게도 처리 중 상태가 사라지고 업로드한 파일을 선택 할 수 있게 되어 통화를 서둘러 종료를 하였다는 소식입니다.



반응형
Posted by Hippalus
,