[iOS] swift 3.x : UILabel 높이 자동 맞춤

UILabel autosize height

외부 UIView에 Constraints 추가
사용자 삽입 이미지

UILabel에 Constranints 추가 및 Lines 0으로 설정
사용자 삽입 이미지


사용자 삽입 이미지

전체소스 : labelAutoHeight.zip

Posted by incree

2017/01/24 21:29 2017/01/24 21:29
, , ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

UILabel multiple attributes, UILabel strikethrough text

letstyle1: [String:Any] = [NSForegroundColorAttributeName:UIColor.darkGray,NSFontAttributeName:UIFont.systemFont(ofSize:12),NSStrikethroughStyleAttributeName:NSUnderlineStyle.styleSingle.rawValue,NSStrikethroughColorAttributeName:UIColor.cyan]
let style2: [String: Any] = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont(name: "Georgia", size: 25.0)!]
let style3: [String: Any] = [NSForegroundColorAttributeName: UIColor.blue, NSBackgroundColorAttributeName: UIColor.yellow, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 13), NSUnderlineStyleAttributeName : NSUnderlineStyle.styleSingle.rawValue]
let style1Text = "회색 12폰트 취소선 cyan"
let style2Text = "빨간색 25폰트 폰트지정"
let style3Text = "파란색 13폰트 볼드 밑줄 배경 노랑"
let style1String = NSMutableAttributedString(string: style1Text, attributes: style1)
let style2String = NSMutableAttributedString(string: style2Text, attributes: style2)
let style3String = NSMutableAttributedString(string: style3Text, attributes: style3)

        lblMultiFontStyle.attributedText = style1String

 * swift 2.x
let style1: [String : AnyObject] = [
                    NSForegroundColorAttributeName: UIColor.darkGrayColor(),
                    NSFontAttributeName: UIFont.systemFontOfSize(12),
                    NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]
                let style2: [String : AnyObject] = [
                    NSForegroundColorAttributeName: UIColor.blackColor(),
                    NSFontAttributeName: UIFont.systemFontOfSize(12)]
                let style3: [String : AnyObject] = [
                    NSForegroundColorAttributeName: ColorUtil.hexStringToUIColor("#AF0A2B"),
                    NSFontAttributeName: UIFont.boldSystemFontOfSize(13)]

                let style1Text = "첫번째 12폰트 취소선 회색"
                let style2Text  = "두번째 12폰트 검은색"
                let style3Text = "세번째 볼드 13폰트 컬러 : AF0A2B"

                let style1String = NSMutableAttributedString(string: style1Text, attributes: style1)
                let style2String = NSMutableAttributedString(string: style2Text, attributes: style2)
                let style3String = NSMutableAttributedString(string: style3Text, attributes: style3)

                lblMultiFontStyle.attributedText = style1String

사용자 삽입 이미지

전체소스 : multiFontStye.zip

Posted by incree

2017/01/24 21:13 2017/01/24 21:13
, ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

GCM 이용해서 Push Notifications 개발시 아래와 같은 에러가 나는 경우

2016-11-21 13:37:03.136446 ccourt[2223:955954] You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

Project -> Targets -> Capabilities  에서

Push Notifications 와 Background Modes.Remote notifications 를 ON으로 설정하면 된다

사용자 삽입 이미지

Posted by incree

2016/11/21 14:05 2016/11/21 14:05
, ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Swift Cookie sharing between multiple WKWebViews


self.processPool = [[WKProcessPool alloc] init];

WKWebViewConfiguration *configuration1 = [[WKWebViewConfiguration alloc] init];
configuration1.processPool = self.processPool;
WKWebView *webView1 = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration1];
WKWebViewConfiguration *configuration2 = [[WKWebViewConfiguration alloc] init];
configuration2.processPool = self.processPool;
WKWebView *webView2 = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration2];

Posted by incree

2016/04/21 20:54 2016/04/21 20:54
, , , , ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] 웹뷰 프린트 하기

UIWebView에서 air print로 print하기

애플 개발자 센터에 있는 sample 소스

Posted by incree

2013/08/28 04:06 2013/08/28 04:06
, , ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] 25 iOS App Performance Tips & Tricks

25 iOS App Performance Tips & Tricks


Posted by incree

2013/04/05 04:18 2013/04/05 04:18
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] 흔들기 모션 처리

- (void)viewDidAppear:(BOOL)animated
    [super viewDidAppear:animated];
    [self becomeFirstResponder];


// ***** - 요거 중요 자꾸 빼먹는다
- (BOOL)canBecomeFirstResponder {
    return YES;

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    [super motionBegan:motion withEvent:event];

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    [super motionEnded:motion withEvent:event];
    if (motion == UIEventSubtypeMotionShake) {
        [self.delegate showBrokenImage];

Posted by incree

2013/01/09 17:02 2013/01/09 17:02
, , ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] 앱이 판매될때마다 알림 받기



AppSales allows iOS and Mac App Store developers to download and analyze their sales reports from iTunes Connect on the iPhone.


  • Automatic download of daily and weekly sales reports from iTunes Connect
  • Stacked bar graphs to see all your sales at a glance
  • Show your sales on a world map
  • View actual payments by Apple on a calendar
  • Group daily reports by fiscal or calendar month to predict your next payment
  • Automatic conversion to your currency of choice
  • Download customer reviews of your apps
  • Import reports that you downloaded elsewhere (for example with AppViz on your Mac) via iTunes File Sharing
  • Optional push notifications when new reports are available via Boxcar

Please see the screenshot below for a visual guide to AppSales' main interface and some tips and tricks.


AppSales requires the iOS 5.0 SDK or later.

Because there is no API to access some parts of iTunes Connect, AppSales scrapes itunesconnect.apple.com. This means that even small changes on this website can break some functionality. In most cases, this is easy to fix and I'll try to make a new version available here. The report download itself uses Apple's auto-ingestion interface to iTunes Connect and should generally be unaffected by changes to the website.

Push Notifications

Because sales reports are not always available at the same time, I run a web service to send out push notifications when the daily reports have been generated.

You can get a notification when new reports are available with the free Boxcar app. Boxcar can also be installed directly from the settings in AppSales.

If AppSales is installed, opening the push notification will automatically trigger the download of new reports but you can also use the push service without AppSales being installed. To do so, install Boxcar and just add AppSales from the list of services in Boxcar.

Except for the total number of subscribers, I don't collect any data with the push service. You can stop receiving notifications at any time by simply removing AppSales from Boxcar.


You can follow me on Twitter for updates on the development: @olemoritz

If you'd like to support this effort, please consider a donation via PayPal or Flattr:

테스트는 안해봄

Posted by incree

2012/11/22 22:51 2012/11/22 22:51
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] change rootViewController with animation

[UIView transitionWithView:self.window duration:0.5
    options: UIViewAnimationOptionTransitionFlipFromLeft
        self.window.rootViewController = newViewController;

빨간 부분은 도대체 먼 문법이냐??.

[UIView transitionWithView:containerView
        animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }

Posted by incree

2012/06/21 17:28 2012/06/21 17:28
, ,
0 Trackbacks , 0 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[iPhone] UIWebview user agent 변경하기

이번에 아이폰 앱을 개발하면서 user agent를 변경해야 할 일이 생겼다.

안드로이드는 메소드가 있어서 쉽게 변경이 되지만(webView.getSettings().setUserAgentString(userAgent))
 iOs는 방법을 찾기가 어려웠다

구글링해서 나온 여러가지 방법을 시도해 봤지만 모두 변경에 실패했다.

간혹 앱 안에서는 변경이 되는 경우도 있었지만, 실제로 서버에 전달된 agent는

역시 변경전의 값이었다

성공 여부와 상관없이 확인한 방법은 크게 4가지였다

1. webview 의 request에 직접 user-agent를 지정하는 방법

2. PerformSelector를 이용하는 경우

3. method swizzling을 이용

4. NSUserDefaults 에 값을 세팅 하는 방법(이 방법은 도대체 어떻게 알아냈을까?)

구글링 해보면 1번 방법이 가장 많이 나오는것 같다.

이 방법은 NSLog로 찍어보면 변경되는 것 같지만,

실제로 서버에는 변경된 agent가 전달되지 않는다

2번은 private API로 리젝사유가 된다고 해서 시도해 보지 않았다.

3번이 가장 확실한 것처럼 얘기들을 하는데, 역시 실패했다.

두번째 URL에 있는 샘플 소스를 다운받아서 테스트 해봤지만

역시 서버에는 변경전의 agent가 전달됐다.

4번은 초기에 시도해 보고 변경되는 걸 확인은 했는데 원하던 방법이 아니었다.

원래 기기가 가지고 있는 agent에 문자열을 추가하는 방법으로 변경하길 원했는데,

이 방법은 원래 agent를 확인할 수가 없었다.

기본 agent를 확인하는 방법은


이 방법을 사용했는데,

이렇게 하면 NSUserDefaults에 값을 세팅하는게 의미가 없어진다.
(shouldStartLoadWithRequest에서 agent가 고정으로 세팅돼 버린다)

이 방법은 안되는 걸로 생각해서 다른 방법만 찾았는데,

도저히 찾을수가 없었다.

그러던중 우연히 기본 agent 가져오는 다른 소스를 발견하고 적용했는데

너무 쉽게 처리가 됐다.


webview의 stringByEvaluatingJavaScriptFromString으로

자바스크립트에서 agent를 가져오는 방법이다.

알고나면 간단한데.. 이걸 몰라서 헤맨걸 생각하니 억울하다.

UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:secretAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
[dictionnary release];
[webView release];

이 코드를 main controller 이나 app delegate에 삽입하면 된다.

성곡적으로 원하는 대로 잘 된다. 이제 리뷰만 통과하면 된다.

설마 리젝되진 않겠지...

Posted by incree

2012/04/07 18:03 2012/04/07 18:03
, ,
0 Trackbacks , 2 Comments

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다