336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



iOS에서 실제로 사용 할 수 있는 폰트 패밀리명, 이름 정보를 한눈에 볼 수 있는 방법입니다.

보시면 폰트 이름을 가지고 폰트를 지정해주면 됩니다. 

폰트 이름은 일반적으로 패밀리명-Bold, 패밀리명-Light 이런식으로 표기 됩니다.


(Objective-C)

1
2
3
4
5
6
for ( NSString * familyName in [UIFont familyNames]) {
    NSLog(@"========%@========", familyName);
    for ( NSString * fontName in [UIFont fontNamesForFamilyName:familyName] ) {
        NSLog(@"%@", fontName);
    }
}
cs


(Swift)

1
2
3
4
5
6
for familyName in UIFont.familyNames() {
    print("========\(familyName)===========")
    for fontName in UIFont.fontNamesForFamilyName(familyName) {
         print(fontName)
    }
}
cs



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

iOS)단어 정의 사전으로 찾기  (0) 2016.05.04
iOS)App 설정으로 이동하기  (0) 2016.05.03
iOS)위젯에서 앱 오픈하기  (0) 2016.04.25
iOS)이미지에 색 넣기  (0) 2016.03.03
iOS)가로 모드 막기  (0) 2016.02.17
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


위젯에서 버튼 또는 특정 이벤트를 통해 앱으로 연결 방법 입니다.

일단 info.plist에 사진과 같이 URL types을 추가해 주셔야 됩니다.

URL identifier은 앱 고유 아이디인 Bundle ID를 적고, URL  Schemes에 앱 이름을 적어 주시면 됩니다.

밑에 코드에 앱네임을 적어 주시고 원하는 위치에 코드를 적용 시켜 주시면 됩니다.

(Objective-C)

1
2
NSURL * url = [NSURL URLWithString:@"AppName://"];
[self.extensionContext openURL:url completionHandler:nil];
cs


(Swift)

1
2
let url = NSURL(string: "AppName://")
extensionContext?.openURL(url!, completionHandler: nil)

cs



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

애플 계열의 프로그램을 만들다 보면 정말 공포의 대상인 리뷰가 있습니다.

리젝 되는 상황에서 메세지를 정리 한 포스트이고 실제로 제가 당한 리젝 사유를 정리 했기때문에 정보가 매우 제한적일 수 있습니다. 

앞으로도 리젝을 당할때마다 계속 추가 될 내용입니다. 


3.1 - Apps or metadata that mentions the name of any other mobile platform will be rejected

해석) 다른 모바일 플랫폼의 이름이 언급된 앱 또는 메타 데이터는 리젝됩니다.

제 상황) 공지사항에 안드로이드 플랫폼 이름이 노출 되어있어서 리젝된 경우입니다.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

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


(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


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

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


(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 //가로화면만 허용

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

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

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


(Objective-C 코드)

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


cs

(Swift 코드)

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


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

(Objective-C 코드)

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

(Swift 코드)

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


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

어제 부터 커뮤니티에

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

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

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

 

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


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

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

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

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

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

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



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


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

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

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


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

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

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

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

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

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


+ Recent posts