스파게티에서 탈출! iOS 개발의 전환 문제를 깔끔하게 해결하는 편리한 라우팅 라이브러리 소개

by @mixiappwchr

여러분, 요즘은 storyboard를 사용해 바리발리 개발하고 있다고 생각합니다만, 음색을 타고 있으면 이렇게 되거나 하지 않겠습니까?



너무 복잡해서 어떻게 되는지 모르겠습니다. . . !

storyboard의 segue는 직관적이고 알기 쉽습니다만, 그대로 segue에서의 천이만 사용하고 있는 곧바로 스파게티인 view가 됩니다.
적절하게 여러 storyboard로 나누거나 xib과의 구분을 하면 됩니다만, 귀찮게 하거나 합니다.

원래 iOS 개발에서 화면을 전환하는 패턴은 다양합니다.
  • navigationControler에 push
  • presentViewController에서의 표시
  • view 단독으로 addSubview
  • 외부 앱에서 scheme 시작 또는 그 반대

  • 이 개념을 더 깔끔하고 싶다, 그래! 우리에게는 그게 없잖아! 라고 생각해, 라이브러리를 만들었습니다.

    MYRoutes



    이 라이브러리는, web service 개발에서는 당연히 사용하고 있는 routing의 개념을 iOS 개발에도 반입해,
    전환의 문제를 단순화하려는 라이브러리입니다.
    뿐만 아니라, 전환에 관한 코드를 간단하게 정리하고 있습니다.
     [[MYRoutes shared] loadRouteConfig:@[
          @[@"/nib/:message" ,@{@"nib":@"XIBTestViewController",@"class":@"MYViewController"}],
          @[@"/storyboard/first/:message" , @{@"storyboard":@"Main",@"identifier":@"First"}],
     ]];
    

    그리고 라우팅을 설정하면
     [[MYRoutes shared] dispatch:[NSURL URLWithString:@"/nib/hello?category_id=1"]]
    

    와 URL을 전달하면 설정에 따라 View를 표시합니다.

    매개 변수도 당연히 URL에서 전달할 수 있으며,
     @[@"/nib/:message" ,@{@"nib":@"XIBTestViewController",@"class":@"MYViewController"}],
    

    설정되면 : message와 같은 설명을 매개 변수를 캡처하는 설정입니다.
    [routes dispatch:[NSURL URLWithString:@"/nib/hello?category_id=1"]
    

    같은 URL은 지정된 ViewController에 message 속성에 @ "hello"가 설정된 상태로 표시됩니다.
    또한 query에서도 설정할 수 있으며, 이 경우에는 categoryId에 @"1"이 설정됩니다. URL이므로 스네이크 케이스로 쓰는 것이 많다고 생각합니다만, 자동으로 캬멜 케이스로 변경해 set합니다.

    당연히 URL scheme에서의 기동에 그대로 대응할 수 있다
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        // dispatch from url scheme. example xxxx://tweet/view/id
        return [[MYRoutes shared] dispatch:url ];
    }
    

    그리고 AppDelegate에서 URL을 전달하면 적절하게 처리할 수 있습니다. 무엇보다 코드가 번잡하지 않고 Routing 설정으로 관리하는 것이 가능합니다.

    반대로 외부의 어플리케이션의 기동도 같이 URL을 건네주면 OK입니다.
    [routes dispatch:[NSURL URLWithString:@"http://www.yahoo.co.jp"]]
    

    그 외에도, URL로부터의 라우팅이 아닌, 호출 방법을 편리하게 하는 메소드도 준비하고 있습니다.

    예를 들어, push하고 싶은 경우에 파라미터도 붙이고 싶은 경우
    NSDictionary *params = @{@"message":self.messageTexfield.text};
    [routes pushViewController:@"ViewControllerIdnetifier" withStoryboard:@"StoryboardName" withParameters:params animated:YES completion:nil];
    

    라고 쓰는 것으로 설정한 Dictionary의 파라미터를 갖고 push하는 것이 가능합니다.
    또 push처의 navigationController는 자동 판별하기 때문에, 현재의 navigationController가 취득할 수 없는 장소에서도 기동을 할 수 있습니다.

    아직 굉장히 만들어 방금 만들었기 때문에 기능이 빈약하고 cocoapods에도 최신 버전이 색인되어 있지 않습니다만, 좋으면 사용해 보세요!

    appwchr post

    iOS 개발을 할 때 절대 사용해야합니다! 제거할 수 없다! 웹 서비스, 개발 툴집

    iOS에서 이런 앱, 이런 기능을 만들고 싶다면 이것을 보라! 만들고 싶은 앱에 대응하는 클래스, 프레임 워크, 라이브러리의 정리!

    주목할만한 iBeacom 등의 파도를 극복하지 않기 위해! iOS의 블루투스 개발을 용이하게 하는 라이브러리를 썼습니다.

    아직도 있었다! iOS의 개발을 극적으로 개선하는 최신의 웹 서비스, 개발 툴집 1

    더욱 편안한 앱 개발! iOS 개발을 더욱 획기적으로 개선하는 최신 웹 서비스, 개발 도구 모음 2

    스파게티에서 탈출! iOS 개발의 전환 문제를 깔끔하게 해결하는 편리한 라우팅 라이브러리 소개

    좋은 웹페이지 즐겨찾기