어제(9월 8일) 안드로이드 7.0 누가의 OTA 메시지를 받았습니다.

Nexus 5x 구입해서 마시멜로 사용한지 9개월만에 새 OS를 만났네요..

누가 업데이트 알림이 왔습니다


업데이트 후 제일 먼저 눈에 들어왔던 건

상단의 퀵세팅 타일이었습니다.

퀵세팅 타일이 심플해졌어요

마시멜로에서 처음 등장했던 퀵세팅 타일의 심플 버전이 생겼네요.

여기서 바로 와이파이나 손전등을 터치 한 번으로 켜거나 끌 수 있습니다.

 

이전 마시멜로에서는 넓은 타일이 나와서 한눈에 보기에는 편했지만

화면 대부분을 덮어서 좀 불편한 느낌도 없지 않았지요.


물론 누가에서도 심플 타일에서 아래로 한번 더 swipe 하면

넓은 타일을 볼 수 있습니다.


여기서 블루투스 이어폰을 연결하려고

블루투스 버튼을 터치했는데 이렇게....

곧바로 블루투스 설정 화면으로 들어가 버리더군요.

저는 우아하게 블루투스만 살짝 켜려고 했는데 말이죠.


우아한 조작을 위해서 수정 버튼을 터치하고 순서를 변경해 봤습니다.

수정 모드에서 해당 버튼을 길게 터치하면 이동이 가능합니다


퀵메뉴 타일에서 편리해진 또 하나가

배터리 세이버 모드 선택이 용이해 졌다는 겁니다.


마시멜로에서는 배터리를 선택해서

배터리 설정 화면으로 들어간 후

다시 배터리 세이버 모드로 들어가서 활성화 해야 했습니다.



마시멜로에서는 배터리 세이버 켜기가 쉽지 않습니다


누가에서는 퀵세팅 타일에서 배터리 터치하면

곧바로 배터리 세이버 선택이 가능해집니다.

배터리 세이버도 우아하게


잠금화면 알림창도 스타일리시하게 변했습니다.

스타일리시해 보이는 듯한 느낌적인 느낌

잠금해제 화면에서의 알림도 확실히 달라진 느낌입니다.

광고 메일도 우아하게 보이는군요


설정화면에도 들어가 봤습니다.

설정 메뉴별로 대표 설정값들이 한눈에 들어옵니다.

현재 설정값들을 한눈에 볼 수 있습니다


그리고 무엇보다 만족스러웠던 점..

여유 저장 공간이 1.6GB 이상 늘었네요.

마시멜로 때에는 2.9G 이던 여유 공간이 4.5G로 늘었네요

OS 업데이트 되면서 임시 파일이 삭제된 것일 수도 있지만

 OS 파일 크기도 줄어든 게 아닐까 싶네요.


오늘은 여기까지입니다.

이제 하루 틈틈히 써 본 거라 내용이 많지는 않네요.

계속 써보면서 또 올려보도록 하겠습니다.



UIabel 위에  UIImageView 를 올려서

이미지를 라벨 위에 노출되도록 하려고 하는데


iOS7 에서는 문제 없이 노출되는데

iOS8 에서는 UIImageView가 UILabel 밑으로 들어가 버리는 문제가 생겼습니다.


UILabel *trainLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, posY, 85, 50)];
[cellView addSubview:trainLabel];

UIImage *noImage = [UIImage imageNamed:@"test.png"];
UIImageView *noImageView = [[UIImageView alloc] initWithImage:noImage];
noImageView.frame = CGRectMake(0, 0, 18.0, 18.0);
[trainLabel addSubview:noImageView];


 iOS7

iOS8 

 



 



레이어 순서 문제로 보여

Subview들의 layer 순서를 조절할 수 있는 방법을 찾다 보니

다음의 함수를 찾을 수 있었습니다.


- insertSubview:(UIView *) aboveSubview:(UIView *)

Inserts a view above another view in the view hierarchy.

Declaration

SWIFT

func insertSubview(_ viewUIView,
      aboveSubview siblingSubviewUIView)

OBJECTIVE-C

- (void)insertSubview:(UIView *)view
         aboveSubview:(UIView *)siblingSubview

Parameters

view

The view to insert. It’s removed from its superview if it’s not a sibling ofsiblingSubview.

siblingSubview

The sibling view that will be behind the inserted view.

Discussion

This method establishes a strong reference to view and sets its next responder to the receiver, which is its new superview.

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.


참고: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/insertSubview:aboveSubview:



addSubview 대신 insertSubView: aboveSubview 를 이용하여


UIImage *noImage = [UIImage imageNamed:@"test.png"];
UIImageView *noImageView = [[UIImageView alloc] initWithImage:noImage];
noImageView.frame = CGRectMake(trainLabel.frame.origin.x, trainLabel.frame.origin.y, 18.0, 18.0);
[cellView insertSubview:noImageView aboveSubview:trainLabel];


위와 같이 수정하니

iOS8에서도 iOS7와 같이 UILabel 위에 UIImageView 를 놓을 수 있었습니다.


조금이나마 도움 되셨기를.... ^^

아이폰 앱 다운로드 링크


NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];

[[UIApplication sharedApplication]openURL:appStoreURL];


참고

http://stackoverflow.com/questions/433907/how-to-link-to-apps-on-the-app-store

지난 WWDC에서 iOS 9가 발표되면서 apple developer 사이트에도 iOS 9 베타 버전이 공개되었는데요,


그래서인지 벌써부터 iOS 9 베타를 설치하시는 분들이 많이 계시더군요.


그런데 iOS 9로 업데이트한 후 운영 중인 앱이 사용할 수 없다는 VOC가 들어오더군요.


마침 xcode 7 베타 버전도 같이 공개되어 부랴부랴 다운로드 받아서 설치해 봤습니다.


시뮬레이터로 확인해 보니


App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

CFNetwork SSLHandshake failed (-9824)

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."


secure connection 이 필요하다는 메시지가 나오네요.


검색을 해보니 iOS 9.0 이상에서는 ATS(App Transport Security)라는 기술이 나오네요.


결론은 app - web 간 connection 에서는 secure connection 이 기본값이라는 ....


그런데 서버가 특A급은 아니다 보니.... 아무래도 SSL 암복호화 부하를 무시할 수는 없어서....


로그인이 필요 없는 일부 기능만이라도  SSL을 좀 피해보려고....


관련 내용을 찾아 봤습니다.


찾아보니 info.plist 에서 예외 처리를 할 수 있더군요.


NSAppTransportSecurity > NSAllowsArbitraryLoads : true 로 설정하면 ATS 를 비활성화 할 수 있습니다.




또는





다시 리빌드 해보니 정상적으로 사용이 가능하네요.


조금이나마 도움 되시기를....


※ 참고


https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html


https://github.com/facebook/react-native/issues/1563

  1. 마느링 2015.09.22 21:50

    본문에 NSAllowsArbitaryLoads -> NSAllowsArbitraryLoads 로 바뀌어야 할 것 같아요

    복사할수 있는 텍스트가 약간 잘못되있네요

    좋은 정보 감사합니다!!!!

    • hyshin 2015.09.30 11:51 신고

      지적 감사합니다 ^^ 바로 수정했습니다~ 조금이나마 도움 되셨기를 바랍니다 ^^

  2. 안드로이드 개발자 2015.11.06 18:12

    책보고 하는데 안되길래 서치해서 보게 되었습니다.
    저의 경우에 info.plist에 해당 key-value가 없어서 추가를 했습니다.
    추가할 수 있다는 것도 첨 알았네요

    잘 배우고 갑니다.~

    • hyshin 2015.11.17 17:50 신고

      댓글 감사합니다 ^^ 도움 되셨으면 다행이네요. 좋은 하루 되세요 ^^

+ Recent posts