티스토리 뷰
안녕하세요 :) Zedd입니다.
요새 잠을 통 못잤는데..역시 주말...너무 좋아...
토요일이 거의 날아갔네요...
암튼 NSUserActivity를 공부해보도록 합시다.
제가 iOS ) Task Management - Undo - UndoManager 글에서 iOS에는 Task Management라는 것들이..있구나..라는 것을 알았는데요,
이렇게 말했었죠? NSUserActivity도 이 Task Management에 속하는 애였어요.
바로 Activity Sharing.
암튼 봅시다. NSUserActivity.
NSUserActivitys는 특정 시점의 앱 상태를 나타내는 표현?인데요.
NSUserActivity객체는 앱의 상태를 캡쳐(capture)하여 나중에 사용하도록 배치하는 간단한 방법을 제공합니다.
user activity 객체를 생성하고, 이를 사용하여 앱 content보기, 문서 편집, 웹페이지 보기 또는 비디오 시청과 같이 사용자가 수행한 작업에 대한 정보를 캡쳐합니다.
시스템이 앱을 실행하고, activity객체를 사용 할 수 있게 되면, 앱은 해당 객체를 사용하여 자기자신을 적절한 상태로 복원(restore)할 수 있습니다.
key moments(중요한 순간)에 NSUserActivity객체를 만들고 이를 시스템에 등록합니다. 예를들어, 사용자가 웹페이지를 열거나, 앱이 백그라운드로 이동하거나, 사용자가 앱에서 다른 중요한 작업을 수행 할 때, user activity객체를 만들 수 있습니다. user activity객체는 앱의 모든 작업을 추적할 수 있는 방법이 아니므로, 작은 편집이나 기타 사소한 변경작업에는 사용하지 말아야 합니다. 대신, 사용자가 나중에 또는 다른 디바이스에서 계속 진행 할 수 있는 중요한 체크 포인트에 사용하세요.
그것들을 사용하여 더 나은 Spotlight검색 결과를 제공 할 수도 있습니다.
user activity객체를 만들 때, 다음을 수행하세요.
1. 적절한 user activity객체를 생성하고 초기화하세요. (앱이 지원한는 activity 타입을 정의합니다.)
2. user activity 객체의 타이틀을 설정합니다.
3. 다음 프로퍼티 하나 이상을 활성화 하여 객체를 사용 할 수 있는 작업을 구성합니다.
4. 사용자의 현재 작업과 관련된 객체의 프로퍼티를 구성(Configure) 합니다.
5. 검색 또는 public indexing을 위해 구성된 user activity객체의 경우, keywords 또는 webpageURL프로퍼티를 구성하여 Spotlight에서 객체를 인덱싱 할 수 있도록 합니다.
6. user activity객체를 시스템에 등록하려면, becomeCurrent()메소드를 호출하세요.
NSUserActivity객체를 만들 때, activity타입을 식별하는 문자열을 지정합니다. Activity type strings은 일반적으로 reverse-DNS 포맷입니다. 예를들어, 사용자가 웹페이지를 열면com.myCompany.myApp.OpenWebPage와 같은 Activity type strings을 지정 할 수 있습니다.
info.plist파일에 NSUserActivityTypes 키를 포함하여 앱이 지원하는 Activity type을 선언해야 합니다. 시스템은 해당 키의 정보를 사용하여, 앱이 주어진 user activity객체를 전달 할 수 있는지 여부를 결정합니다.
시스템은 user activity 객체를 만든 개발자의 ID와 연관시킵니다. activity를 계속 할 때, 시스템은 주어진 Activity type을 지원하고, Activity의 source 앱과 동일한 개발자 ID를 갖는 앱을 찾습니다.
developer Team ID에 activity객체를 입력하면, 경쟁업체의 앱에서 생성한 활동을 가로채지(intercepted) 못하게 됩니다.
Team ID를 사용하면, 앱이 App Store를 통해 배포되거나 개발자 ID로 서명되어야 한다는 의미입니다.
Supporting Handoff
Handoff는 사용자가 activity를 시작하고, 다른 activity를 계속 할 수 있게 해주는 기술입니다. Handoff의 경우, user activity객체가 컨텍스트에서 사용되려고 합니다. (? 뭔뜻) 예를들어, iPad에서 비디오를 보고 있는 사용자는 Mac에서 같은 지점의 비디오를 계속 볼 수 있습니다. 이 예제에서, user activity객체에는 사용자가 보았던 비디오 및 iPad에서 시청을 중단한 지점에 대한 정보가 포함됩니다.
Handoff를 지원하려면 isEligibleForHandoff프로퍼티를 true로 설정해야합니다.
헉 근데 왜 true로 안했는데 됐지..?
디폴트 값이 true군요.
Supporting SiriKit
Supporting Improved Search Results
1. 적절한 user activity객체를 생성하고 초기화하세요. (앱이 지원한는 activity 타입을 정의합니다.)
2. user activity 객체의 타이틀을 설정합니다.
3. 다음 프로퍼티 하나 이상을 활성화 하여 객체를 사용 할 수 있는 작업을 구성합니다.
4. 사용자의 현재 작업과 관련된 객체의 프로퍼티를 구성(Configure) 합니다.
5. 검색 또는 public indexing을 위해 구성된 user activity객체의 경우, keywords 또는 webpageURL프로퍼티를 구성하여 Spotlight에서 객체를 인덱싱 할 수 있도록 합니다.
6. user activity객체를 시스템에 등록하려면, becomeCurrent()메소드를 호출하세요.
제가 옆에 번호를 적어놔봤어요.
Handoff 사용해보기에 있던 예제코드인데, 3번이 추가되었습니다. 디폴트값이...true긴 하지만 명시적으로 다시 한번 해줍시다. 그래야 뭐에 관한 코드인지 알 수 있을 것 같으니까요.
그리고 지금 보니까, 1번의 activity type string이 너무 general하네요.. 그리고 reverse-DNS format를 권장하니..뭐 이건 알아서.
참고로 activityType 이라는 프로퍼티가 있어서 나중에 string을 주면 될 것 같지만, get only라 불가능합니다.
title은 참고로 optional입니다. Handoff시에는 이 title이 도통 어디에 쓰이는지 모르겠네요.
뭔가 여기서 같이 떠야할 것 같지만....안뜨니까...
하지만 Search시에는 이 title을 항상 지정하라고 권장하고 있습니다. 그 문자열이 검색 결과에 표시된다고 해요.
6번의 becomeCurrent() 메소드. 그니까 사용자가 associated activity를 수행중임을 시스템에 알리는 메소드에요.
becomeCurrent()와 반대의 메소드도 있는데요, resignCurrent()입니다.
이 resignCurrent()를 호출하면 user activity가 전체적으로 invalidate(무효화) 된다고 합니다.
자. Handoff는 해봤으니까..
Search랑 PublicIndexing만 좀 보면 될 것 같은데요, 일단 저는 Search먼저 보겠습니다.
자, 아까 Handoff코드에서 딱 한줄만 바꿔보겠습니다.
자, isEligibleForSearch를 true로 지정해주도록만 바꿔보았습니다. 참고로 isEligibleForSearch는 디폴트값이 false입니다.
그리고 실행해보면,
역시나 이게 뜨구요, 왜냐? isEligibleForHandoff는 디폴트값이 true니까..
이제 홈버튼을 눌러줍니다. 헉 쓰고보니..이제 홈버튼..안누르는 사람이 더 많을지도....
하지만 제가 유튜브 영상에서도 말씀드렸다시피....
Face ID > 도플갱어가 폰 뺐어감 > 열림 > 내 정보와 돈이 탈탈 털릴 수 있음
즉, 지문이 짱이다.....
네 다음 정신승리
네 암튼..어떻게든 홈화면만 가면 됩니다.
홈화면 가서 밑으로 제스쳐 하면
이 화면(Spotlight)이 보일텐데요,
여기서 저희가 입력해준 title의 일부를 검색해보겠습니다. 위에서 "안녕하세요 안녕하세요" 였죠?
즉 여기서 알 수 있는 사실은..title프로퍼티의 값이..저기 뜨게 된다...
여기서..제가 겪은 이슈.
title을 "안녕하세요 :) Zedd입니다"로 바꾼다 > 다시 검색 한다
> 이 전에꺼가 나옴 (나의 경우에는 "안녕하세요 안녕하세요")
를 겪었는데요, 이럴때는...앱 삭제를 하고 다시 설치를 하고, 다시 검색하면 이제 title이 잘 바뀌어서 나와있습니다.
오늘은 여기까지.
더 할 기운이 없음. NSUserActivity이 쪽도 결코 적은 내용이 아니네요.
얘네끼리 뭐 어케어케 엮여있음..
+ ) 추가
위에서
6. user activity객체를 시스템에 등록하려면, becomeCurrent()메소드를 호출하세요.
'iOS' 카테고리의 다른 글
iOS ) UIView > Configuring the Event-Related Behavior (2) | 2019.01.30 |
---|---|
iOS ) Peek and Pop (2) | 2019.01.26 |
iOS ) Handoff 사용해보기 (1) | 2019.01.17 |
iOS ) available (0) | 2018.12.21 |
iOS ) Text Input Traits (3) | 2018.12.10 |
- swift 공부
- WWDC
- Git
- actor
- Swift
- Xcode
- swift sort
- IOS
- github
- swift tutorial
- swift delegate
- np-complete
- Combine
- swift array
- swift3
- UIBezierPath
- 스위프트 문법
- 회고
- Accessibility
- 피아노
- WidgetKit
- iOS delegate
- np-hard
- ios 13
- WKWebView
- 제이슨 파싱
- FLUTTER
- 스위프트
- fastlane
- SwiftUI
- Total
- Today
- Yesterday