안녕하세요. 개발자 myoung 입니다.

오늘은 iOS의 사용자 기기이름, 버전등을 가지고 올때 사용하는 currentDevice에 대해서 포스팅 하겠습니다.

애플 문서를 보게 되면

1
2
3
4
5
6
7
public var name: String { get } // e.g. "My iPhone"
public var model: String { get } // e.g. @"iPhone", @"iPod touch"
public var localizedModel: String { get } // localized version of model
public var systemName: String { get } // e.g. @"iOS"
public var systemVersion: String { get } // e.g. @"4.0"
public var orientation: UIDeviceOrientation { get } 
// return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.
cs


UIDevice 하위에 포함되어 있는 메소드 이며, 현재 디바이스에 대한 정보를 리턴해주는 메소드 입니다.

단일 객체로 이름, 모델, 모델의 지역 버전, 시스템이름, 시스템버전,  디바이스 현재 방향 String 객체를 리턴해주는 것을 알 수 있습니다.

이런식으로 사용 하시면 됩니다.


(Objective-C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSLog(@"%@", [UIDevice currentDevice].name);
NSLog(@"%@", [UIDevice currentDevice].model);
NSLog(@"%@", [UIDevice currentDevice].localizedModel);
NSLog(@"%@", [UIDevice currentDevice].systemName);
NSLog(@"%@", [UIDevice currentDevice].systemVersion);
NSLog(@"%ld", (long)[UIDevice currentDevice].orientation)
 
//결과 값
iPhone Simulator
iPhone
iPhone
iPhone OS
9.3
0
cs


(swift)

1
2
3
4
5
6
7
8
9
10
11
12
13
print(UIDevice.currentDevice().name)
print(UIDevice.currentDevice().model)
print(UIDevice.currentDevice().localizedModel)
print(UIDevice.currentDevice().systemName)
print(UIDevice.currentDevice().systemVersion)
print(UIDevice.currentDevice().orientation)
        
//결과 값
iPhone Simulator
iPhone
iPhone
iPhone OS
9.3
cs

궁금한 점이나 틀린 부분이 있다면 댓글을 남겨 주세요!



'iOS 프로그래밍 > iOS' 카테고리의 다른 글

iOS)무음에서 소리 나오게 하기  (0) 2016.07.19
iOS)사진첩에 사진 저장하기  (0) 2016.06.12
iOS)디바이스 정보 가져오기  (0) 2016.06.08
iOS)딕셔너리 키값 정렬 하기  (0) 2016.06.06
iOS)랜덤 함수  (0) 2016.05.26
iOS)TTS(Text-to-Speech) 사용하기.  (0) 2016.05.19

이미지에 원하는 색으로 색칠을 해주는 코드입니다.

같은 아이콘이지만 여러가지 색으로 바꿔줘야 할때 유용 할 것 같습니다.


(Objective-C 코드)

1
2
3
4
5
6
7
8
9
10
UIImage *image = [UIImage imageNamed:@“your_img_name”];
CGRect rect = CGRectMake(00, image.size.width, image.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale);
CGContextRef c = UIGraphicsGetCurrentContext();
[image drawInRect:rect];
CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor);
CGContextSetBlendMode(c, kCGBlendModeSourceAtop);
CGContextFillRect(c, rect);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cs


(Swift 코드)

1
2
3
4
5
6
7
8
9
10
let image = UIImage(named: "your_img_name")
let rect = CGRectMake(00, image!.size.width, image!.size.height)
UIGraphicsBeginImageContextWithOptions(rect.size, false, image!.scale)
let c : CGContextRef = UIGraphicsGetCurrentContext()!
image?.drawInRect(rect)
CGContextSetFillColorWithColor(c, UIColor.blackColor().CGColor)
CGContextSetBlendMode(c, CGBlendMode.SourceAtop)
CGContextFillRect(c, rect)
let resultImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
cs


앱을 만들때 세로모드만 사용하여 가로모드를 막아야 할 경우 필요한 코드 입니다.

가르모드가 필요없는 뷰컨트롤러에 넣어 주면 적용됩니다.


(Objective-C 코드)

1
2
3
4
- (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait; //세로 화면만 허용
}
cs

UIInterfaceOrientation 속성입니다.

UIInterfaceOrientationMaskPortrait //세로 화면만 허용

UIInterfaceOrientationMaskAll //전체 화면 허용

UIInterfaceOrientationMaskPortraitUpsideDown //거꾸로만 허용

UIInterfaceOrientationMaskLandscape; //가로화면만 허용


(Swift 코드)

1
2
3
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.Portrait
}
cs

UIInterfaceOrientation 속성입니다.

UIInterfaceOrientationMask.Portrait //세로 화면만 허용

UIInterfaceOrientationMask.All //전체 화면 허용

UIInterfaceOrientationMask.PortraitUpsideDown //거꾸로만 허용

UIInterfaceOrientationMask.Landscape //가로화면만 허용

위젯을 만들때 왼쪽 여백 조금 남습니다.

디자인상 왼쪽 여백 필요 하시면 그냥 쓰시면 되지만 또 디자인상 불필요할때도 있습니다.

그 왼쪽 여백을 없애주는 코드 입니다. 그냥 추가만 해주시면 되요!


(Objective-C 코드)

1
2
3
-(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
    return UIEdgeInsetsZero
}


cs

(Swift 코드)

1
2
3
func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
    return UIEdgeInsetsZero
}
cs


최상단에 있는 rootViewController를 가지고 오는 코드입니다.

(Objective-C 코드)

1
UIViewController * viewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
cs

(Swift 코드)

1
let viewController: UIViewController = UIApplication.sharedApplication().delegate!.window!!.rootViewController!
cs


어제 부터 커뮤니티에

"삼성 대단하네요. 대박 큰 사건 터졌네요 ㄷㄷㄷ.jpg"라는 글이 올라왔습니다

글의 요지는 간단하게 말하면 삼성 폰에 내장 되어 있는 "스마트매니저"라는 앱이 많은 권한을 요구 한다는 글 이었습니다

(출처:http://386dx.com/b/v/ddanzi/13368/1)

 

(클릭시 원본을 볼 수 있으며 첨부된 사진중 일부)


필자는 삼성 폰을 쓰지 않아서 저 앱이 무슨 기능을 하는지 정확히 모릅니다

간단한 검색 또는 이름으로 볼때 전체적인 시스템을 관리 해주는 앱인거 같습니다

안드로이드 초창기 시절 메모리 관리 앱들이 많은 인기가 있었습니다

스마트 매니저와 비슷한 기능을 하는 앱을 예를 들겠습니다

'클린 마스터'라는 앱입니다. 주요기능은 메모리 확보 및 cpu 최적화 등등등 정말 많은 기능들이 있습니다

3000만이상의 다운로드와 설명에는 4억대 이상의 기기의 향상을 도왔다고 설명 되어 있는데,, 권한을 한번 확인 해보겠습니다



(클릭시 원본을 볼수 있으며 출처는 구글스토어 입니다)


스마트 매니저와 비슷한 수준의 권한을 요구 하고 있습니다

또 한가지 앱은 인텔시큐리티사의 맥아피 백신 앱입니다

인텔이 2009년에 인수한 회사의 앱입니다. 권한을 한번 보겠습니다


(클릭시 원본을 볼수 있으며 출처는 구글스토어 입니다)

인텔의 백신 앱 마저 스마트매니저와 비슷한 권한을 요구 하고 있습니다
이런 것처럼 앱을 백신, 보안 또는 시스템 관리를 해야되는 앱은 안타깝지만 많은 권한을 필요로 합니다
제 생각으로는 삼성을 욕하기보다는 안드로이드 문제인거 같습니다
안드로이드 개발에 있어서  가이드를 제시하는 회사는 주인인 구글이기 때문입니다

보통 무료 앱을 보시면 광고가 화면 밑에 배너 광고가 달려 있는 것을 볼 수 있습니다
1인 개발자나 소규모 그룹들은 수익 또는 보조 수익을 위해 광고를 포함시키는 경우가 많습니다
그렇게 되면 광고회사들이 요구한 권한을 앱에 포함 하게 됩니다.
(위치정보, 인터넷 연결 등등)

이런 권한 문제는 안드로이드, IOS 둘다 똑같은 문제 인거 같습니다.
다만 IOS가 다른 방식으로 좀더 사용자에게 확실히 인지를 시키는 방법이기는 합니다

저런 권한을 요구하면서 개발자가 정말 안 좋은 생각을 품는다면 뭔들 못하겠습니까
하지만 Application Software 개발자는 정해진 가이드에 의해 개발을 할 수 밖에 없습니다
이 문제의 답은 안타깝게도 없는거 같습니다

옛날보다 인터넷을 통해 많은 정보를 쉽게 볼 수 있는 시대 입니다
단편만 보지 않았으면 하는 바램으로 글을 작성합니다
(물론 제 생각입니다 이문제에 대한 토론은 환영입니다)


+ Recent posts