Iphone App Minus App Store

iPhone App Minus App Store?

Official Developer Program

For a standard iPhone you'll need to pay the US$99/yr to be a member of the developer program. You can then use the adhoc system to install your application onto up to 100 devices. The developer program has the details but it involves adding UUIDs for each of the devices to your application package. UUIDs can be easiest retrieved using Ad Hoc Helper available from the App Store. For further details on this method, see Craig Hockenberry's Beta testing on iPhone 2.0 article

Jailbroken iPhone

For jailbroken iPhones, you can use the following method which I have personally tested using the AccelerometerGraph sample app on iPhone OS 3.0.

Create Self-Signed Certificate

First you'll need to create a self signed certificate and patch your iPhone SDK to allow the use of this certificate:

  1. Launch Keychain Access.app. With no items selected, from the Keychain menu select Certificate Assistant, then Create a Certificate.

    Name: iPhone Developer

    Certificate Type: Code Signing

    Let me override defaults: Yes

  2. Click Continue

    Validity: 3650 days

  3. Click Continue

  4. Blank out the Email address field.

  5. Click Continue until complete.

    You should see "This root certificate is not trusted". This is expected.

  6. Set the iPhone SDK to allow the self-signed certificate to be used:

    sudo /usr/bin/sed -i .bak 's/XCiPhoneOSCodeSignContext/XCCodeSignContext/' /Developer/Platforms/iPhoneOS.platform/Info.plist

    If you have Xcode open, restart it for this change to take effect.

Manual Deployment over WiFi

The following steps require openssh, and uikittools to be installed first. Replace jasoniphone.local with the hostname of the target device. Be sure to set your own password on both the mobile and root users after installing SSH.

To manually compile and install your application on the phone as a system app (bypassing Apple's installation system):

  1. Project, Set Active SDK, Device and Set Active Build Configuration, Release.

  2. Compile your project normally (using Build, not Build & Go).

  3. In the build/Release-iphoneos directory you will have an app bundle. Use your preferred method to transfer this to /Applications on the device.

    scp -r AccelerometerGraph.app root@jasoniphone:/Applications/

  4. Let SpringBoard know the new application has been installed:

    ssh mobile@jasoniphone.local uicache

    This only has to be done when you add or remove applications. Updated applications just need to be relaunched.

To make life easier for yourself during development, you can setup SSH key authentication and add these extra steps as a custom build step in your project.

Note that if you wish to remove the application later you cannot do so via the standard SpringBoard interface and you'll need to use SSH and update the SpringBoard:

ssh root@jasoniphone.local rm -r /Applications/AccelerometerGraph.app &&
ssh mobile@jasoniphone.local uicache

Excluding specific iPhone types from App Store submission

Unfortunately, there is no support from Apple for this kind of thing. But you can do something like detecting whether the user's device is an iPhone SE and if so show a full screen alert saying "App is not supported for this device" and block the UI (which is not recommended unless it's required).

Just a thought:
If you are lucky to find out one device capability which distinguish iPhone SE, you can set that to value in UIDeviceRequiredCapabilities key in info.plist.

Example: Adding an item to UIRequiredDeviceCapabilities in your Info.plist with the requirement of "bluetooth-le" should limit your app to iPhone 4S/5 and iPad 3, 4 and mini. You could also throw in a "camera-flash" requirement to limit the app to iPhones only, should you need that.

More info: Device Compatibility Matrix

Create an IOS application without using App-Store

  • Create Archive
  • Export for Ad Hoc Development
  • Distribute by uploading it using testflightapp.com

It also doesn't need a Distribution Profile, however a Developer Profile is required

Private iPhone App, without App Store?

Your company can pay $299/yr to join the enterprise program which allows you to deploy app without going through the AppStore.

You can create Ad Hoc distributions for ≤ 100 users.

You can jailbreak all the target iPhones and do whatever you want.

how to delete app from app store

You go to iTunes Connect, select manage applications, select the app you want to delete > rights and pricing> deselect all app stores.

This will set your app to 'developer removed from sale'.

I believe you can delete the app entirely after this, and the 'delete app' button should now be added to the first screen after you select the app. If you do delete the app, you will never be able to use the app name again. If you plan on using it, just 'developer removed from sale'.

How to create or setup private app store for iPhone/iPad applications

You might be interested in the iOS Developer Enterprise Program, although it doesn't fit your description exactly.

why I can’t open a App Store link inside a web view?

Some links on tapping them might activate actions / redirect with url schemes that are non HTTPs like

  • _blank to open a new tab
  • mailto to launch the mail application
  • some other deep link techniques familiar to device OSs

I believe the app store link uses a combination of the above and WKWebView cannot handle non HTTPs schemes.

What you can do is to listen to URLs that fail using WKNavigationDelegate and handle them accordingly

I am not using SwiftUI but I think you can get the picture.

Set up using the same HTML as you with both the links

class ViewController: UIViewController, WKNavigationDelegate
{
override func viewDidAppear(_ animated: Bool)
{
super.viewDidAppear(animated)

let html = """
<a href="https://apps.apple.com/us/app/directorio-notarios-cdmx/id1544000342"> Appstore link dont open</a></span></span><br />

<a href="https://landercorp.mx" rel="noopener"> Normal link </a></span></span><br />
"""

let webview = WKWebView()
webview.frame = view.bounds
webview.navigationDelegate = self
view.addSubview(webview)
webview.loadHTMLString(html, baseURL: nil)
}
}

Then I implement these WKNavigationDelegate functions

  1. decidePolicyFor navigationAction (documentation link) to allow even urls that do not follow the HTTPs scheme to be allowed to be processed

  2. this navigation fail delegate function webView didFailProvisionalNavigation and check if iOS can handle the open in a new tab, mail, deep link etc so in your case it would open the app store

  3. You could also implement the same logic as point 2 in this
    WKNavigationDelegate function just in case

// MARK: WKNavigationDelegates

func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
{
decisionHandler(.allow)
}

func webView(_ webView: WKWebView,
didFailProvisionalNavigation navigation: WKNavigation!,
withError error: Error)
{
manageFailedNavigation(webView,
didFail: navigation,
withError: error)
}

func webView(_ webView: WKWebView,
didFail navigation: WKNavigation!,
withError error: Error)
{
manageFailedNavigation(webView,
didFail: navigation,
withError: error)
}

private func manageFailedNavigation(_ webView: WKWebView,
didFail navigation: WKNavigation!,
withError error: Error)
{
// Check if this failed because of mailto, _blank, deep links etc
// I have commented out how to check for a specific case like open in a new tab,
// you can try to handle each case as you wish
if error.localizedDescription
== "Redirection to URL with a scheme that is not HTTP(S)"
//let url = webView.url, url.description.lowercased().range(of: "blank") != nil
{
// Convert error to NSError so we can access the url
let nsError = error as NSError

// Get the url from the error
// This key could change in future iOS releases
if let failedURL = nsError.userInfo["NSErrorFailingURLKey"] as? URL
{
// Check if the action can be handled by iOS
if UIApplication.shared.canOpenURL(failedURL)
{
// Request iOS to open handle the link
UIApplication.shared.open(failedURL, options: [:],
completionHandler: nil)
}
}
}
}

Give this a go and check if this fixes your issue. On my side, both links seem to work fine:

Open WKWebview target="_blank" mailto deeplink new tab app store link or open an App Store link inside a web view



Related Topics



Leave a reply



Submit