# 왜 찾아봤나

iOS7 에서 iOS8 을 넘어가는 시점에 바뀐게 참 많다.

그래서 개발할때 분기 처리해서 개발해야하는 것들이 점점 많아졌고,

(특히 미디어 관련해서)


이미 deprecated 된 메소드를 이용해 개발을 하면 언젠가 문제가 될테니

분기해서 2개 기능을 모두 구현하고는 했는데 도저히 이제는 버릴 코드를 만드는게 시간이 부족해서 안되겠음.



iOS7을 버리려면 근거가 있어야하는데 그게 바로 iOS 버전별 점유율 차트.

어디인가는 있을텐데 매번 찾기 귀찮으니 한번 정리해봤음



# 찾았다

https://developer.apple.com/support/app-store/


애플 개발자 페이지에 간략하게 표기되어있으나 이걸로는 부족!




http://hwstats.unity3d.com/mobile/os-ios.html


유니티를 사용한 기기 버전인거 같음. 게이머들 대상으로 보면될거 같음. 최신기기 비율이 더 높음



https://david-smith.org/iosversionstats/


보고서 형식. 일단은 여기가 최고다.

iOS 7.x이하는 3.9%로 보인다. 생각보다 많네 -_-; 실제 사용비율은 모르겠지만.;

오래된 기기는 최신 앱을 설치하지도 않을거 같지만 일단은 그렇다.



# 결론


어쨌든 결론을 정해놓고 근거를 찾은거라

3.9%가 난 적다고 주장하겠음-_-); 



아마 앱 스토어 개발자 페이지 통계에 가면 실제 내가 개발한 앱의 통계를 볼 수 있을테니 그걸 참고하는게 제일 좋긴 합니다.

(또는 Flurry 라던가 구글 애널리스틱스 라던가를 달아놓으면 더 쉽게 해결)




1. 문제

무음모드에 둔 상태이고


[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

로 세팅하고 음악 재생 중에 홈 버튼을 눌러서 홈 화면으로 이동하면


백그라운드 상태로 진입하면서 재생은 계속 되는데 스피커로 소리가 나온다.

무음 모드인지를 체크해야하는데 구글링해서 나온 방법은 모두 동작 안하고 있음.


2. 임시 수정

일단 이어폰있는지는 체크가 되서 이어폰 있으면 백그라운드 재생하고, 아니면 막아 둠.



3. 수정 

 로직은 다음과 같음.

 

 이어폰이 꽂혀 있다 -> 뮤트 상태 상관없이 계속 재생

 이어폰이 없다 -> 뮤트 아니면 계속 재생

                      -> 뮤트 상태면 스톱 시킨다.


 백그라운드에서 복귀하면 mute 모드를 따르므로 다시 resume 처리


 3.1) 이어폰 체크 로직

 - (BOOL)isHeadsetPluggedIn

{

    AVAudioSessionRouteDescription *route = [[AVAudioSession sharedInstance] currentRoute];


    BOOL headphonesLocated = NO;

    for (AVAudioSessionPortDescription *portDescription in route.outputs) {

        headphonesLocated |= ([portDescription.portType isEqualToString:AVAudioSessionPortHeadphones]);

    }

    return headphonesLocated;

}


3.2) 뮤트 체크 로직

 

 https://github.com/hoishing/MuteChecker

 https://github.com/fopina/MuteDetector

 

 위 2개 중에 아래를 사용. 테스트 했을 때는 잘 되는거 같다.

 원리는 위 링크에 설명되어있음.

 

 무음을 재생해서 반응 속도로 하는거 같은데. 가끔 오류 나는거 같긴 한데; 일단 무시




위 로직 적용해서 구현 완료



- 해결 !

+ Recent posts