Search와 관련된 3 APIs

  • NSUserActivity
  • Web Markup
  • CoreSpotlight => 이 중에서 Core Spotlight를 자세히 볼 것이다.

Core Spotlight API 사용하기

  • Core Spotlight에 엔트리 저장하기

1. iOS 9에서 사용 가능한 Search API 사용하여 Core Spotlight에 저장이 가능하다.
아래에서 보듯이, 각각의 CSSearchableItem을 만들고 searchableItems라는 임시 어레이에 저장하자.

let attributeSet = CSSearchableItemAttributeSet(itemContentType: "image" as String)
attributeSet.title = person.name
attributeSet.contentDescription = "This is an entry all about the interesting person called \(person.name)"
attributeSet.thumbnailData = UIImagePNGRepresentation(person.image)

let item = CSSearchableItem(uniqueIdentifier: person.id, domainIdentifier: "com.ios9daybyday.SearchAPIs.people", attributeSet: attributeSet)
searchableItems.append(item)

2. CSSearchableIndex에서 indexSearchableItems를 호출하자.
이것은 실제로 사용자들이 검색할 수 있고 그 결과를 볼 수 있도록 CoreSpotlight에 저장하는 것이다.

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems, completionHandler: 
{ error -> Void in
    if error != nil {
        print(error?.localizedDescription)
} })

3. 다음과 같이 검색 결과를 Core Spotlight에서 볼 수 있다.


  • 사용자에 대한 응답
    spotlight에서 검색 결과를 선택하면, AppDelegate의 continueUserActivity UIAppicationDelegate로 들어오게 된다. 이 곳에 로직을 추가하면 된다. 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {

    // Find the ID from the user info
    let friendID = userActivity.userInfo?["kCSSearchableItemActivityIdentifier"] as ! String

    // Find the root table view controller and make it show the friend with this ID
    let navigationController = (window?.rootViewController as! UINavigationController)
    navigationController.popToRootViewControllerAnimagted(false)
    let friendTableViewController = navigationController.viewController.first as! FriendTableViewController
    friendTableViewController.showFriend(friendID)

    return true

  }


더 많은 정보



소스코드 - https://github.com/shinobicontrols/iOS9-day-by-day/tree/master/01-Search-APIs
참고 - iOS 9 Day by Day - by shinobicontrols





WWDC 2015에서 발표했듯이, iOS9에서는 IPv6 네트워크 서비스만을 제공한다. 모든 앱은 2016년 초에 IPv6를 제공하여 앱스토어에 제출해야 한다


앱이 IPv6와 호환되기 위해서는, (=> 리젝을 안당하려면 ㅋㅋ)

  1. 네트워킹 프레임워크(e.g., "NSURLSession")을 사용할 것.
  2. IPv4 전용 API의 사용을 피할 것.
  3. 하드코딩된 IP 주소의 사용을 피할 것.


IPv6 네트워크 테스트: 아직 native IPv6 네트워크에 연결이 불가한데 앱 테스트는 어떻게 할 수 있는가?

  • Mac OS X에서 이를 제공할 예정
  • Mac이 핫스팟을 제공할 때 'IPv6-only' 를 선택하면 IPv6 네트워크 생성 가능
  • 테스트할 앱을 가지고 있는 iPhone/iPadMac을 통해 만들어놓은 personal IPv6-only 네트워크에 연결함. MacIPv4 인터넷으로의 게이트웨이 역할을 함

 

앱스토어에 앱을 제출하기 위해서 개발자들은 상기 방법 등을 이용하여 IPv6 네트워크에서 테스트해보아야 함.
안그러면 리젝 100000000%!



+ Recent posts