Linking Reveal’s static library into your iOS application is the quickest and easiest way to enable Reveal introspection.
Dynamic Loading
Dynamic loading allows third party libraries to be loaded into an iOS application on demand, at runtime. In this scenario the library is not linked in to the executable, but is instead included in the app bundle and can be loaded on demand. This approach allows developers to maintain full control over when the Reveal library is loaded, and when the service is started and stopped within their application.
CocoaPods
CocoaPods is a dependency management system for iOS and OSX projects. It automates the configuration of workspaces to manage 3rd party library dependencies in Xcode projects.
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED /* make sure a default max version is set */ #ifndef __IPHONE_OS_VERSION_MAX_ALLOWED #define __IPHONE_OS_VERSION_MAX_ALLOWED __IPHONE_9_0 #endif /* make sure a valid min is set */ #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0 #undef __IPHONE_OS_VERSION_MIN_REQUIRED #define __IPHONE_OS_VERSION_MIN_REQUIRED __IPHONE_2_0 #endif
App Installation Status. Is the app is installed on the device? (installed apps seem to get preference)
Personalized App Engagement. Does the individual engage with the screen in the app? This is based on time spent with result that Apple determines from session analytics.
App Result Click-Through Rate. Do users frequently click through the search result vs. picking another result or searching again?
Keywords/ Title. Do keywords from the “keywords” and “title” designations in the app markup match up with the user’s query?
Aggregated Engagement. How many users engage with the app screen?
Structured Data on Web. Is structured data correctly implemented?
Canonical App IDs. Is the same screen associated with one unique ID or URL across multiple indexing methods (NSUserActivity, CoreSpotlight, and Web Markup)?
Strength/Popularity of Web URL. How popular is the website associated with the app deep links? (Presumably, this is based on Applebot’s crawl.)
Negative Ranking Factors
Low Engagement. Do very few users engage with the app screen? (engagement determined by session analytics)
Over-Indexing. Does the app have many screens in the index with low or no engagement?
Returns. Do users return to search results right after looking at the app?
Keywords Spamming. Are developers stuffing too many irrelevant keywords into the keyword field?
Interstitials. Is something covering the content in the app or preventing users from accessing it?
Javascript (web only). Is Javascript preventing Applebot from crawling your site to find new app deep links?
Low Star Ratings, Low Review Volume, Poor Reviews. Apple has not explicitly called these negative ranking factors for Apple Search, but they are negative ranking factors for the App Store, so we expect Apple to treat them similarly here.
Apple recommends pursuing multiple indexing methods to optimize app visibility, but the overlapping methods will inevitably create duplication across the various indexes. For example, private content could have both a NSUserActivity and CSSearchableItem indexed, and public content could have both a NSUserActivity and a Web Markup deep link indexed.
This is obviously not ideal for controlling Applebot’s efficiency, so Apple strongly recommends associating each NSUserActivity, CSSearchableItem, and Web Markup deep link with the same uniqueIdentifier and/or URL. This is Applebot’s version of a canonical, and it’s so important to Apple that they’ve even made it a ranking factor in the Apple Search algorithm.