첨단 기술: 문자 & 메일 & 전화 & 인증 코드 & 프로그램 이동 & 정적 라이브러리 & 알림 & 출시
*iOS 9.0 오픈 무료 리얼리티 테스트*
OS X-code  :
1. AppID:  iCloud
2.   
3.   AppID Xcode
4.      mac 
5. Target - General - Team(Fix Issue)
6. Target - Build Settings -   (code signing ->Debug   )
7.     
8.     
  :
   -    -     (    )
1. 문자
Module 1 기능 부족->
                    - (IBAction)sendMessage:(UIButton *)sender {
  NSURL *url = [NSURL URLWithString:@"sms://xxx xxxx xxxx"];
  [[UIApplication sharedApplication]openURL:url];
}
Method 2기능 멀티->
                  #import 
      
  ->클릭하여 트리거:
- (IBAction)sendMessage:(UIButton *)sender {
    [self showMessageView:@[@"xxx xxxx xxxx"] title:@"msg title" body:@"     "];
   
}
-> 호출 방법
-(void)showMessageView:(NSArray *)phones title:(NSString *)title body:(NSString *)body{
    if ([MFMessageComposeViewController canSendText]) {
        MFMessageComposeViewController *msgController = [MFMessageComposeViewController new];
        //           
        msgController.recipients = phones;
        msgController.body = body;
        msgController.title = title;
        //    *********  
        msgController.messageComposeDelegate = self;
        msgController.navigationBar.tintColor = [UIColor redColor];
        [self presentViewController:msgController animated:YES completion:nil];
    }else{
        NSLog(@"        ");
    }
}
-> 구현 프로토콜* #pragmark - MFMessage ComposeViewControllerDelegate*
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    switch (result) {
        case MessageComposeResultSent:
            NSLog(@"    ");
            break;
        case MessageComposeResultFailed:
            NSLog(@"    ");
        case MessageComposeResultCancelled:
            NSLog(@"    ");
        default:
            break;
    }
}
2. 우편물
거의 문자랑 똑같아요. icloud에서 메일을 열고 계정을 설정해야 돼요.
      #import 
      
  ->클릭하여 트리거
**    *
- (IBAction)sendMail:(UIButton *)sender {
    if ([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *mailCon = [MFMailComposeViewController new];
        [mailCon setSubject:@"    "];
        [mailCon setToRecipients:@[@"[email protected]"]];
        
        /**   */
        // [mailCon setCcRecipients: *)#>];
        /**   */
        // [mailCon setBccRecipients: *)#>];
        
        [mailCon setMessageBody:@"           :          " isHTML:YES];/* ----> no      */
        /**   */
        UIImage *image = [UIImage imageNamed:@"pic"];
        NSData *imageData = UIImagePNGRepresentation(image);
        [mailCon addAttachmentData:imageData mimeType:@"image/png" fileName:@"abc.png"];
        
        //    
        mailCon.mailComposeDelegate = self;
               
        [self presentViewController:mailCon animated:YES completion:nil];
    }else{
        NSLog(@"     ");
    }
}
-> 구현 프로토콜 *# pragmark - MFmail ComposeViewControllerDelegate*
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    switch (result) {
        case MessageComposeResultSent:
            NSLog(@"    ");
            break;
        case MessageComposeResultFailed:
            NSLog(@"    ");
        case MessageComposeResultCancelled:
            NSLog(@"    ");
        default:
            break;
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}
전화를 걸다
방식 1: 직접 지출
 NSURL *url = [NSURL URLWithString:@"tel://xxx xxxx xxxx"];
 [[UIApplication sharedApplication]openURL:url];
방식2: 사용자에게 블랙 애플 장치에 사용할 수 있는 선택을 주지만 이러한 방식의 접속은 거절당할 수 있다
 NSURL *url = [NSURL URLWithString:@"telprompt://xxx xxxx xxxx"];
 [[UIApplication sharedApplication]openURL:url];
방식 3: 선택의 기회가 있다
@interface ViewController ()
{
    UIWebView *_webView;
}
@implementation ViewController
 if (_webView == nil) {
        _webView = [[UIWebView alloc]initWithFrame:CGRectZero];
    } 
    NSURL *url = [NSURL URLWithString:@"tel://xxx xxxx xxxx"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];     
 [_webView loadRequest:request];
4. 문자 인증번호@사이트 주소
#import "AppDelegate.h"
#import 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [SMSSDK registerApp:MOBAPPKEY withSecret:MOBAPPSECRECT];
    return YES;
}
  #import "ViewController.h"
 #import 
 
**     **
- (IBAction)getMsgCode:(UIButton *)sender {
    [SMSSDK getVerificationCodeByMethod:SMSGetCodeMethodSMS phoneNumber:@"xxxxxx" zone:@"86" customIdentifier:nil result:^(NSError *error) {
        if (error) {
            NSLog(@"       ,%@",error);
        }else{
            NSLog(@"       ");
        }
    }];
}
**  **
- (IBAction)validMsgCode:(UIButton *)sender {
    [SMSSDK commitVerificationCode:self.msgCodeField.text phoneNumber:@"xxxxxx" zone:@"86" result:^(NSError *error) {
        if (error) {
            NSLog(@"    ");
        }else
        {
            NSLog(@"    ");
        }
    }];
}
 5. 어플리케이션 간 점프
YourApp)YourAppNSURL *url = [NSURL URLWithString:@"YourApp://"];
   UIApplication *app = [UIApplication sharedApplication];
   if ([app canOpenURL:url]) {
       [app openURL:url];
   }else{
       NSLog(@"        ");
   }
다른 응용 프로그램으로 이동합니다. 예를 들어 웨이보, 위챗 등...해당하는 scheme와 설정 화이트 리스트를 찾습니다
NSURL *url = [NSURL URLWithString:@"sinaweibo://"];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:url]) {
        [app openURL:url];
    }else{
        NSLog(@"       ");
    }
진급: 차단 파라미터 -> MyApp에서 YourApp 2단계 페이지로 이동 - Page2
- (IBAction)gotoYourApp:(UIButton *)sender {
    NSURL *url = [NSURL URLWithString:@"YourApp://aaa?backScheme=MyApp"];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:url]) {
        [app openURL:url];
    }else{
        NSLog(@"        ");
    }
}
- (IBAction)gotoYourAppP2:(UIButton *)sender {
    NSURL *url = [NSURL URLWithString:@"YourApp://bbb?backScheme=MyApp"];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:url]) {
        [app openURL:url];
    }else{
        NSLog(@"      P2  ");
    }
}
 #import Appdelegate
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    ***  
    NSLog(@"%@",url.absoluteString);
    ***      
    UINavigationController *navi = (UINavigationController *)self.window.rootViewController;
    ViewController *mainVc = (ViewController *)navi.topViewController;
    NSString *urlString = url.absoluteString;
    NSRange range = [urlString rangeOfString:@"backScheme="];
    
    if (range.length > 0) {
        NSInteger fromInteger = range.location + range.length;
        NSString *backStr = [urlString substringFromIndex:fromInteger];
        mainVc.backScheme = backStr;
        NSLog(@"backStr:%@",backStr);/*****    :`MyApp`
    }
    
    ***     P2
    if ([urlString hasPrefix:@"YourApp://bbb"]) {
        [mainVc performSegueWithIdentifier:@"page2Segie" sender:nil];
    }
    return YES;
}
```
```
#import "ViewController.h"
- (IBAction)gotoMyApp:(UIButton *)sender {
//    NSURL *url = [NSURL URLWithString:@"MyApp://"];
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",self.backScheme]];
    UIApplication *app = [UIApplication sharedApplication];
    if ([app canOpenURL:url]) {
        [app openURL:url];
    }else{
        NSLog(@"        ");
    }
}
```
>   APP       
**   :    **
```
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
```
**   :ios9        (    IOS    )**
```
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    NSLog(@"%@",url.absoluteString);
    return YES;
}
```
**   :ios9    **
```
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
    
}
```
# 6.    
>  :               ,      ,                           .            ,             
- 1        ?
```
    framework(            ) - (     :Target -> BuildPhases ->CopyFiles)
```
- 2        
    1.          2.          
        
 ```
lipo -create/  /Debug-iphoneos/libStaticLibrary.a /  /Debug-iphonesimulator/libStaticLibrary.a -output/    /libStaticLibraryFile.a
```
     ,      。 .h      .a         。
# 7.   
>  :         ,                 ,                 。         。             。
    :APP    (  or  )     APP    (    or    )
#####         
- 1      
- 2      (`                `)
- 3     
- 4     
- 5     (        )
#####  
-  APP   ,         
-  APP  ,     .         
-  APP       ,             
-       ,            APP
##1.     
  >  :        ,        ,         。              ,             。  :    、      、      
`  `:iOS8.0           
```
          :[UIDevice currentDevice].systemVersion.floatValue
```
**        :**
1.         UILocalNotification
```
#import "AppDelegate.h"
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
        [[UIApplication sharedApplication]registerUserNotificationSettings:settings];
```
2.       (                  )
3.         userInfo(`   `)
4.     (scheduleLocalNotification     or     )
_        :_
```
      @property(nullable, nonatomic,copy) NSDate *fireDate;  
      @property(nullable, nonatomic,copy) NSString *alertBody;
      @property(nullable, nonatomic,copy) NSString *alertTitle;
      @property(nullable, nonatomic,copy) NSString *soundName;
      @property(nullable, nonatomic,assign) NSInteger applicationIconBadgeNumber;
       @property(nullable, nonatomic,copy) NSString *alertAction;
      @property(nullable, nonatomic,assign) NSCalendarUnit  *repeatCanlendar;
         @property(nullable, nonatomic,copy) NSString *alertLaunchImage;
       @property(nullable, nonatomic,copy) NSDictionary *userInfo;  ->userInfo[@"username"] = @"xxx"  -> localNoti.userInfo = userInfo;;
```
###       
##### App         (       ),      
```
#import "AppDelegate.h"
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    **  APP      **
    if (application.applicationState == UIApplicationStateActive) {
        NSLog(@"    ");
    }else{
        NSLog(@"    ");
        NSLog(@"       ");
        NSLog(@"%@",notification.userInfo[@"username"]);
    }
}
```
#####App    ,      
**                         **
- launchOptions               
     ->  key:UIApplicationLaunchOptionsLocalNoticifationKey      
- launchOptions              
```
#import "AppDelegate.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (launchOptions) {
        label.text = [NSString stringWithFormat:@"      :%@",launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]];
     }else
         {
  label.text = @"          ";
         }
}
```
**    **
```
       [[UIApplication sharedApplication]cancelLocalNotification:];
       [[UIApplication sharedApplication]cancelAllLocalNotifications];
```
##2.     
>              ,      ,   Apple     Apple         。
      :    、    、    iphone、     
1. APNS(Apple Push Notification Service)  
 - 1  -App  IOS        ,iOS       APNS   
 - 2  -APNS   device_token (    +App  ),    App
 - 3  -App  device_token      PUSH     
 - 4  -                 ,      APNS
 - 5  -APNS    PUSH              App
2.     [Apple     ](https://developer.apple.com)
         CSR(Certificate Signing Request)  
         :  CSR  : LaunchPad -    -     -      -      -            
  @[1](http://www.jianshu.com/p/585291fd9226) @[2](http://www.jianshu.com/p/e59bca4a1ac3)
        :
 - 1.       ,        
 - 2.                   ,           ,    。Certificate->All->Developer -> iOS App revoke
 - 3.     CSR  ->     (1)
 `  :  OSX WWDR         ,    ,   Apple            ` 
 - 4.    AppIDs    , Apple              (    id)
  :Identifiers->AppIDs->"+"->  App  ->  BundleID->      (Push Notifications)(2)
 - 5.   App ID ,  AppID          Certificate -> Development  -> "+" ->   "Apple Push Notification Server" SSL ->             App ID -> CSR        
 - 6.      
 - 7.      :Device ( X-code  windon       ID)->     +  ID     
##3.[    ](https://www.jpush.cn)
 - 1     
 - 2   APPKEY APPSECRET   Apple       `(    &    )`,        ".p12"     
 - 3     sdk       lib           PushConfig.plish        APPDelegate.h 
  - 3.1   SDK    ,     lib    (  APService.h、libPushSDK.a)          )
  - 3.2     
```
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework 
Foundation.framework
UIKit.framework
Security.framework
libz.dylib
```
  - 3.3      PushConfig.plist  
                  PropertyList  ,      PushConfig.plist,  Portal        APP_KEY   
    ```
    "APS_FOR_PRODUCTION = "0"; 
    "CHANNEL" = "Publish channel";
    "APP_KEY" = "AppKey copied from JPush Portal application";
    ```
  - 3.4     
##8.     
  - 1 [      ](https://developer.apple.com)    App id(  id)
  - 2   bundleid    id  
  - 3    [iTunes Connect](https://itunesconnect.apple.com) ->  APP ->   APP  (  Appid)
  - 4     :         ->Product ->Archive
  - 5    [iTunes Connect](https://itunesconnect.apple.com)       
      :
1.        ,     2.            3.     4.      UI/UE (    ) 5.      
        :
    1.   UI  2.           3.         4.      5.         6.          7.        이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.