• Stars
    star
    1,385
  • Rank 33,928 (Top 0.7 %)
  • Language
    Objective-C
  • License
    Other
  • Created over 12 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The iHasApp iOS Framework allows you to detect installed apps on a user's device.

Notice:

#####This project was made as a "proof of concept" demonstration of how to detect apps installed on an iOS device, from early 2011. Since then, it has been used extensively in many apps, to the point where Apple made the decision to ban the excessive use of -canOpenURL:, the method which iHasApp relies upon to determine app installation. As a result, using a list of URL schemes for app detection is no longer a viable method.

######Statement from Apple:

We found that your app uses public APIs in a manner not prescribed by Apple, which is not in compliance with the iOS Developer Program License Agreement, as required by the App Store Review Guidelines.

In particular, section 3.3.1 of the iOS Developer Program License Agreement specifies:

"Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs"

Specifically, we found this app misuses "canOpenURL:" to extrapolate which apps are installed on a device.

iHasApp Framework

The iHasApp iOS Framework allows you to detect installed apps on a user's device. Detection results can be in the form of an array of detected appIds, or an array of appDictionaries from the iTunes Search API.

Screenshot

Frequently Asked Questions

Background

Basic Setup

  1. Add the iHasApp subfolder to your project and ensure that it is linked to the project target.
  2. Add #import "iHasApp.h" to the classes in which you wish to access iHasApp.
  3. Initialize and begin detection methods.

Example code:

iHasApp *detectionObject = [[iHasApp alloc] init];
[detectionObject detectAppDictionariesWithIncremental:^(NSArray *appDictionaries) {
    NSLog(@"Incremental appDictionaries.count: %i", (int)appDictionaries.count);
} withSuccess:^(NSArray *appDictionaries) {
    NSLog(@"Successful appDictionaries.count: %i", (int)appDictionaries.count);
} withFailure:^(NSError *error) {
    NSLog(@"Failure: %@", error.localizedDescription);
}];

Requirements

  • iOS base SDK 5.0+

Note: schemeApps.json only adds ~180kB to your final, compiled IPA

App Store Safe (UPDATE: no longer accurate; see above)

The iHasApp framework utilizes only public, documented, and non-deprecated APIs. It is completely App Store safe. There are already a number of approved apps on the App Store that have integrated iHasApp.

Like all things, it is always a prudent idea to either ask your users' permission or to include a clause in your EULA.

Example Application

This framework comes with an example application that demonstrates detection initialization and information display.

The iHasAppExample project uses Olivier Poitrey's SDWebImage project to asynchronously display the app icons.

Info & Support

More Repositories

1

DACircularProgress

DACircularProgress is a UIView subclass with circular UIProgressView properties.
Objective-C
2,375
star
2

DAKeyboardControl

DAKeyboardControl adds keyboard awareness and scrolling dismissal (ala iMessages app) to any view with only 1 line of code.
Objective-C
1,577
star
3

iOS-App-Performance-Cheatsheet

A collection of code substitutions and configurations that can improve Objective-C code performance on iOS.
772
star
4

DAAppsViewController

DAAppsViewController is a simple way of displaying apps from the App Store in an aesthetically similar manner.
Objective-C
464
star
5

DAAnisotropicImage

DAAnisotropicImage is an anisotropic UIImage generator. Specifically, for a metallic slider knob.
Objective-C
301
star
6

DAModularTableView

UITableView subclass that abstracts away the ugliness involved with creating static or modular UITableViews. Settings and menu pages are a snap to create with DAModularTableView.
Objective-C
222
star
7

DAReloadActivity

DAReloadActivity is a UIButton subclass (with a refresh arrow by default) with UIActivityIndicatorView properties.
Objective-C
171
star
8

DALinedTextView

DALinedTextView is a UITextView subclass that draws ruled lines to the view, similar to iOS' built-in Notes app. The lines conform to the appropriate line-height for the currently set UIFont.
Objective-C
159
star
9

DAAutoScroll

DAAutoScroll is a UIScrollView category that allows any chosen UIScrollView (or subclass thereof) to automatically scroll itself with adjustable speed. When the user interacts with the view, the scrolling automatically stops.
Objective-C
141
star
10

midjourney-ios

Midjourney iOS app
Swift
7
star
11

AppsView

AppsView is a simple SwiftUI view for displaying apps from the App Store in a similar UI/UX.
Swift
2
star
12

midjourney-swift

Swift package for interacting with Midjourney as a user.
Swift
1
star