iOS App MinimumOSVersion 우회하기 (강제변경)
최근에 iOS 앱 중 최소 설치버전 제한 떄문에 약간 삽질을 했었습니다. 결론부터 말씀드리면 해당 앱 기준으론 성공하지 못했습니다만, 가능성이 없는 방법은 아니기 때문에 블로그 글로 공유해봅니다.
minSdkVersion
iOS도 Android 처럼 minSdkVersion을 가지고 있으며 Info.plist에 MinimumOSVersion로 지정해서 사용하게 되어있습니다. 간단한 수준에선 2가지 정도로 MinimumOSVersion 우회를 넘어갈 수 있는 방법들이 있습니다.
⚠️ 물론 소스코드가 있는 경우 소스코드에서 직접 MinimumOSVersion을 변경하고 빌드하는 것이 좋습니다. 다만 보통 MinimumOSVersion가 존재하는 이유는 실제 동작과 큰 영향이 있기 떄문에 강제로 낮추는 경우 앱이 정상 동작하지 않을 수 있습니다.
Inject SystemVersion
우선은 iOS 디바이스 내 SystemVersion 파일을 수정하는 방법입니다. /System/Library/CoreServices
경로에 SystemVersion.plist
파일이 있고 이 파일에는 버전에 대한 정보가 기입되어 있습니다.
pwd
# iosios:/System/Library/CoreServices
cat SystemVersion.plist
# <?xml version="1.0" encoding="UTF-8"?>
# ....
<?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>ProductBuildVersion</key>
<string>14G60</string>
<key>ProductCopyright</key>
<string>1983-2016 Apple Inc.</string>
<key>ProductName</key>
<string>iPhone OS</string>
<key>ProductVersion</key>
<string>10.3.3</string>
</dict>
</plist>
여기서 ProductionVersion의 값을 바꿔주어 앱의 최소 minSdk를 임의로 수정할 수 있습니다. 저는 혹시 몰라서 ProductBuildVersion 도 바꿔주었습니다. ProductionBuildVersion은 아래 iOS History 문서보면 버전별로 빌드 네임이 있습니다. 그 부분입니다.
https://en.wikipedia.org/wiki/IOS_version_history
<key>ProductBuildVersion</key>
<string>13F69</string>
<key>ProductVersion</key>
<string>9.3.2</string>
Repackaging
두번째는 앱 내부에 Info.plist에서 직접 바꿔주는겁니다. 사실 소스코드가 있다면 Xcode에서 바꿔주면 확실하지만 압축 해제 후 Info.plist에서 버전정보 수정 후 재 서명 후 넣어주면 어느정도 가능하다고 봅니다. (이런 형태의 방법은 안드로이드에서도 많이 사용하죠)
unzip test.ipa
cd test/test.app/
app directory까지 진입하면 앱의 정보를 가지고 있는 Info.plist 파일이 있습니다. 잘 찾다보면 MinimumOSVersion key와 value값이 확인됩니다. 원하는 버전으로 바꿔줍시다.
<key>MinimumOSVersion</key>
<string>10.0</string>
그리고 다시 압축해서 ipa 파일로 만들어주면 우선 앱 파일은 다시 만들어진 상태입니다.
zip -r hwul.zip ./*
mv hwul.zip hwul.ipa
여기서 개별 앱에 대한 무결성 검증차 서명이 필요한데, 개인의 Xcode 인증서나 Cydia Impactor로 서명해서 설치해주시면 됩니다. Cydia Impactor로 넣어주면 인증서 문제도 해결됩니당 (Cydia Impactor는 사용자의 iTunes 계정으로 서명하기 떄문에 서명 우회를 할 필요가 없음)
보통은 이런 방법들로 재서명하니 참고하시길..
제 환경이 문제인지 앱이 문제인지 이런 방법들이 잘못된건지 정확하겐 모르겠지만, 비슷한 문제를 해결하는데 있어 조금이라도 도움되셨길 바랍니다 :)