[iOS] iOS12에 iOS11-style 메모리 적용

iOS12에서 메모리가 뻥튀기 된 이후 애플에 소명 절차를 걸쳐 새로이 provisioning 파일을 받아 적용해보았다 (소명에 필요한 JetsamEvent log 추출은 여기 링크 참조). 뻥튀기라고 했지만 이전에 카운트 되지 않았던 메모리들이 iOS12에서 카운트되면서 늘어난 것인데(애플 메뉴얼 링크), 일부 유저 입장에서는 기존에 잘 돌아가던 앱이 업데이트 이후에 크래시가 나는 상황을 피할 수 없게 된 것이다.  몇십MB 정도라면 어느정도 참아 줄 수 있겠지만, 그 차이가 100MB가 넘어가면 최신 디바이스가 아닌 이상 버티기 어려울 수 있다.

그렇게 소명을 통해 받은 provisioning을 이용하여 빌드 후 이전과 메모리 차이를 살펴 보았다.  아.. 역시 한번에 되는 것은 없다.  메모리의 변화가 없었다.

새로 받은 provisioning을 살펴볼 필요가 있다.  내부를 한번 들여다 보자.  Mac에서 콘솔을 띄워 커멘드를 날려 보았다.

>  security cms -D -i ****_20190801.mobileprovision

security 커맨드를 통해 provisioning파일을 decoding 하여 내용을 살펴 볼 수 있다. 

기존과 다른 것이 하나 있는 데, com.apple.private.memory.legacy_footprint라는 key와 true라는 value가 추가되어 있었다.  아마도 레거시 메모리 스타일로 사용하기 위한 key인 것으로 보인다.

 ....
<key>Entitlements</key>
<dict>
<key>com.apple.private.memory.legacy_footprint</key>
<true/>


.... 

아.. Entitlements에 dict에 추가된걸 보니 entitlement 파일에도 혹시 추가되어야 되는 건 아닐까. entitlement 파일을 찾아 위의 key-value를 추가해서 다시 테스트해보았다.  XCode에서는 기 정의된 key가 없기 때문에 그냥 파일을 열어서 추가를 하였다.

<dict>
<key>com.apple.private.memory.legacy_footprint</key>
<true/>
<key>aps-environment</key>
<string>development</string> 
......

테스트를 해보니 메모리의 차이를 볼 수 있었다. (XCode의 Debug 세션을 이용하였다. )

iOS12-style 메모리
iOS11-style 메모리

iOS13에서도 같은 메모리 스타일로 나올지는 지켜볼 일이다.  iOS11 스타일로 되돌아 가지 않는다면, 앞으로 더 힘들어 질 듯 하다. 끝.


Leave a Reply

Your email address will not be published. Required fields are marked *