HockeyKit - HockeyApp was retired and the SDKs are deprecated. Please use App Center instead.

Overview

About:

Hockey is a iOS Ad-Hoc updater framework. It can be used for all apps that target the Apple AppStore and improves the beta testing process dramatically. All beta testers. It consists of two components, a server and a client framework. The server component is required for all scenarios. But it also can work standalone without the client library. It provides a web interface which beta testers can use to install the latest AdHoc provisioning profile and also the latest beta version via Safari right from the device. One server installation is able to handle multiple applications via different bundle identifiers (I highly suggest using different bundle identifiers for Debug, AdHoc Beta and AppStore release builds !!!). By default the client library will check for updates on your server whenever the app is started or will wake up. The user can adjust this in the settings dialog to alternatively only check once a day or manually.

This framework was created after reading the blog post at http://jeffreysambells.com/posts/2010/06/22/ios-wireless-app-distribution/ where Jeffrey Sambells wrote about the mechanisms required and being available for us to use.

A complete documentation can be found in the wiki at https://github.com/TheRealKerni/HockeyKit/wiki

Requirements:

  • A PHP5 server needs to be available and is required for distribution of the apps
  • iOS 7.1 and later require apps to be distributed via https using a valid signed server certificate trusted by the iOS device
  • No database required!

Features:

  • iOS AdHoc build OTA distribution
  • Automatically generated website, in specific versions for all device types and desktop browser
  • Web interface only requires subdirectory to be created and and .ipa and .plist file (any name) being added/updated
  • Website can be used for first time installation and updates, iOS3 users can use the website from a desktop browser to download the app, iTunes installation instructions for those are also included
  • Can handle multiple apps on one server, one subdirectory per app
  • Optionally shows release notes by displaying the content of a file with the extension .html (use HTML format without wrapping it in and )
  • Provisioning profile link shown optionally (useful if new users are added without building a new version just for them)
  • Support for app icon on website and during installation on the device, place any .png file into the subdirectory (114x114 pixel works on all devices!)
  • Optional client side framework
  • Framework notifies users on startup of new updates, iOS4 users can install directly from within the client (In-App-Updates), iOS3 users will be hinted to the website
  • Framework optionally sends UDID, app version, iOS version, device type to the server, overview will appear automatically in /stats/ website (write access for PHP scripts required)
  • Stats website supports replacing UDIDs with names by entering them into a userlist.txt file within the stats subdirectory
  • Bookmarklet to extract all UDIDs and names from iOS program portal device page available in the stats page
  • Template for an Xcode 3 build script to upload all files to your server after a build (Beta Automatisation.sh)

Notes:

  • The server can run stand alone, the client is optional
  • Beta testers need to run at least iOS 4 to benefit from the auto update functionality
  • Beta testers using iOS 3 will also be notified of updates within the app
  • Please check the iOS README.mkdown for addition iOS client related notes
  • Do not enter a link to the app icon in the organizer screen. Hockey will add that part into the PList automatically on the server, if there is a PNG file found (114pixel icons work on all devices!)
  • Make sure the IPA filename has no space in it. iOS is not able to call that URL correctly.
  • Don't make separate names per IPA file you make, because only the first file found per directory be served

BRANCHES:

The branching structure follows the git flow concept, defined by Vincent Driessen: http://nvie.com/posts/a-successful-git-branching-model/

  • Master branch:

    The main branch where the source code of HEAD always reflects a production-ready state.

  • Develop branch:

    Consider this to be the main branch where the source code of HEAD always reflects a state with the latest delivered development changes for the next release. Some would call this the “integration branch”.

  • Feature branches:

    These are used to develop new features for the upcoming or a distant future release. The essence of a feature branch is that it exists as long as the feature is in development, but will eventually be merged back into develop (to definitely add the new feature to the upcoming release) or discarded (in case of a disappointing experiment).

  • Release branches:

    These branches support preparation of a new production release. By using this, the develop branch is cleared to receive features for the next big release.

  • Hotfix branches:

    Hotfix branches are very much like release branches in that they are also meant to prepare for a new production release, albeit unplanned.

Acknowledgments:

The following 3rd party open source libraries have been used:

Comments
  • Failed to set the server

    Failed to set the server

    hi,

    I have started the apach service on my MacBookPro, and follow the wiki to set the server(just copy public and includes folder to my publicly accessible directory on my web server). And I create a app directory in the public directory, and copy .plist .ipa .mobileprovision to the app directory.

    I Visit this page(public/index.php) directly from your your iPad, I can see my app on the web, and I tap the Install Application button, a pop up view show "Cannot connect to 10.0.0.5".

    Where is problem my setting ?

    Thanks very much.

    opened by mobilehub 25
  • problems with iOS5

    problems with iOS5

    Hi,

    I've got problems with the app installation on an iOS5 device. With iOS4 everything is working!!!

    When i start the installation on the iOS5 device i've got the following error: Unable to download "my application" could not be downloaded at this time.

    I have already the new devicedetector.php

    (
    $agent = $_SERVER['HTTP_USER_AGENT'];

        if (strpos($agent, 'iPad') !== false) {
            if (strpos($agent, 'OS 3') !== false) {
                self::$isOldIOSDevice = true;
            } else {
                self::$isiPad4Device = true;
            }
        } else if (strpos($agent, 'iPhone') !== false) {
            if (strpos($agent, 'iPhone OS 3') !== false) {
                self::$isOldIOSDevice = true;
            } else {
                self::$isNewIOSDevice = true;
            }
        } else if (strpos($agent, 'Android') !== false) {
            self::$isAndroidDevice = true;
        }
    

    )

    opened by gia-sys 21
  • After upgrade to the ios 7.1,click

    After upgrade to the ios 7.1,click "Download Application" shows Cannot install applications because the certificate for xxx.domainname.com is not valid.

    As I know,I should change the url from http to https,but when I do this stuff in ./server/php/includes/router.php,all the css,pic file lost,and shows SSL ERROR on the page。Would help me to find it out please?Thank you.

    opened by kamui0523 15
  • Crash when bundle-version in plist == nil

    Crash when bundle-version in plist == nil

    For some reason, Xcode 4 refuses to fill the bundle-version key in de plist file. That causes HockeyKit to crash.

    Ik think the crash happens in the method isValid.

    Crashlog

    2011-03-21 20:48:15.242 MyApp[8001:707] Reachability Flag Status: -R ------- networkStatusForFlags 2011-03-21 20:48:15.324 MyApp[8001:707] dict:{ appsize = 427172; timestamp = 1300381266; title = MyApp; version = ""; } 2011-03-21 20:48:15.326 MyApp[8001:707] -[NSNull length]: unrecognized selector sent to instance 0x3ee0db98 2011-03-21 20:48:15.341 MyApp[8001:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x3ee0db98' *** Call stack at first throw: ( 0 CoreFoundation 0x3253864f exceptionPreprocess + 114 1 libobjc.A.dylib 0x3677bc5d objc_exception_throw + 24 2 CoreFoundation 0x3253c1bf -[NSObject(NSObject) doesNotRecognizeSelector:] + 102 3 CoreFoundation 0x3253b649 __forwarding + 508 4 CoreFoundation 0x324b2180 _CF_forwarding_prep_0 + 48 5 MyApp 0x000097fd -[BWApp isValid] + 84 6 MyApp 0x0000e0e3 -[BWHockeyManager connectionDidFinishLoading:] + 906 7 Foundation 0x321122f5 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 68 8 Foundation 0x32112277 _NSURLConnectionDidFinishLoading + 78 9 CFNetwork 0x36039411 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 136 10 CFNetwork 0x3602df49 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 100 11 CFNetwork 0x3602e0d1 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 492 12 CFNetwork 0x3602de3b _ZN19URLConnectionClient13processEventsEv + 70 13 CFNetwork 0x3602dded _ZN13URLConnection24multiplexerClientPerformEP18RunLoopMultiplexer + 36 14 CFNetwork 0x3602dd5f _ZN17MultiplexerSource7performEv + 126 15 CFNetwork 0x3602dcdd _ZN17MultiplexerSource8_performEPv + 8 16 CoreFoundation 0x3250fa79 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 12 17 CoreFoundation 0x3251175f __CFRunLoopDoSources0 + 382 18 CoreFoundation 0x325124eb __CFRunLoopRun + 230 19 CoreFoundation 0x324a2ec3 CFRunLoopRunSpecific + 230 20 CoreFoundation 0x324a2dcb CFRunLoopRunInMode + 58 21 GraphicsServices 0x3074a41f GSEventRunModal + 114 22 GraphicsServices 0x3074a4cb GSEventRun + 62 23 UIKit 0x35718d69 -[UIApplication _run] + 404 24 UIKit 0x35716807 UIApplicationMain + 670 25 MyApp 0x00002573 main + 70 26 MyApp 0x00002528 start + 40 ) terminate called after throwing an instance of 'NSException' (gdb)

    bug 
    opened by MacMannes 14
  • Stats

    Stats

    I have the server up and working fine. I can add apps to it and install them on my device. What I can't get to work is the stats. I can open the stats webpage and it lists the apps that I have but there is no information for that apps. I thought I needed to have the client portion installed in my apps but after some reading it seems that is not the case. It appears I should be able to get some minimal stats without the client portion.

    I have checked my apache logs and I have fixed the permission problem with logger.php. Other then that I am at a lost. Can anybody point me in the right direction?

    opened by blubyu 13
  • ios8 - Application Installation Occurs in Background

    ios8 - Application Installation Occurs in Background

    As of ios8 when one clicks the install button the installation occurs on the home screen (i.e. in the background) and progress is not obvious to the user. On previous OS versions the browser would be minified and the application icon, with installation progress would be visible to the user.

    opened by jasonirwin 11
  • [BWHockeyManager parseJSONResultString:]: unrecognized selector

    [BWHockeyManager parseJSONResultString:]: unrecognized selector

    I get a strange crash (on a beta-tester's device: crash-log reported through QuincyKit)... Salient part of the crash log reported below. Of course, the parseJSONResultString: method exists and works fine in normal conditions. The only vague explanation I can think of, is for self to be somehow invalid/non-initialised when this code is ran. According to the user, the crash happens when 1. there is no connection 2. he gets prompted to log into one of the nearby wifi 3. clicks on cancel... Unfortunately, I cannot even get the wifi prompt on my device (and therefore get to the crash)...

    Could it be some weird race condition where clicking on cancel gets the delegate called before the object is fully initialised? Any other suggestion?

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BWHockeyManager parseJSONResultString:]: unrecognized selector sent to instance 0x2768e0'
    
    Thread 0 Crashed:
    0   libSystem.B.dylib                   0x327eb2d4 __kill + 8
    1   libSystem.B.dylib                   0x327eb2bd raise + 17
    2   KanjiBox                            0x000dec4d uncaught_exception_handler (PLCrashReporter.m:137)
    3   CoreFoundation                      0x35aaeadf __handleUncaughtException + 239
    4   libobjc.A.dylib                     0x34e1b593 _objc_terminate + 103
    5   libstdc++.6.dylib                   0x3358cdf9 __cxxabiv1::__terminate(void (*)()) + 53
    6   libstdc++.6.dylib                   0x3358ce4d std::terminate() + 17
    7   libstdc++.6.dylib                   0x3358cf1d __cxa_throw + 85
    8   libobjc.A.dylib                     0x34e1a4cb objc_exception_throw + 71
    9   CoreFoundation                      0x35ab0133 -[NSObject(NSObject) doesNotRecognizeSelector:] + 103
    10  KanjiBox                            0x000d316f -[BWHockeyManager parseJSONResultString:] (BWHockeyManager.m:559)
    11  KanjiBox                            0x000d23c7 -[BWHockeyManager connectionDidFinishLoading:] (BWHockeyManager.m:857)
    12  Foundation                          0x3391b80d -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 69
    ...
    
    opened by zedrdave 11
  • JSON.inc crashing or in a loop

    JSON.inc crashing or in a loop

    I am trying to embed the HockeyKit development branch from today (May 12th 2011) into an iOS app...

    All seems to be well, as the proper URL gets called but the JSON.inc file has an error:

    There was an error parsing the JSON document. The document may not be well-formed. Document contents:

    Here is the Access Log from Apache: 10.0.5.55 - - [12/May/2011:16:35:44 -0600] "GET /apps/api/2/apps/com.medonemarketing.MobileAxis?format=json&udid=1493E89E-1B3E-59C0-B8D2-BB7CF69A5975&app_version=3&os=i64&lang=en&usage_time=0&first_start_at=05%2F12%2F2011 HTTP/1.1" 200 -

    Error Log: [Thu May 12 16:36:44 2011] [error] [client 10.0.5.55] PHP Fatal error: Maximum execution time of 60 seconds exceeded in /www/ioscrash.medonecapital.com/includes/json.inc on line 30

    I tried changing the PHP max timeout to 300 sec, but it still hung until the PHP Fatal Error.

    I am using Xcode 4.0.2 with SDK 4.3...

    Let me know what else I can provide to get this fixed...

    Thanks

    opened by natedavis 11
  • App-dl working on Browser and Droid, not on iPhone

    App-dl working on Browser and Droid, not on iPhone

    Hi,

    I have two apps stored in separate dirs (com.domain.app1iOS, com.domain.app1Android). Each Dir has subdirs for versions (alpha00, alpha01,...). Each sub dir contains for ios: .ipa, .plis, .html and for Android: .apk, .json, .html

    Using a browser the download of the ipa and apk files works.

    Using a browser on an Android device works as well, the apk installs fine.

    Using safari on iOS5 doen't for however, nothing happens at all.

    I tried to figure out whats going on, the generated download url on iOS looks like this:

    itms-services://?action=download-manifest&url=http://subdomain.domain.com/api/2/apps/com.domain.app1iOS?format=plist

    Any ideas whats going on or hints what to try?

    Maybe there is still something broken using ios5?

    Regards, Christoph

    opened by chrsch 10
  • Bizarre PHP error in logger.php

    Bizarre PHP error in logger.php

    Hi folks

    I received this gem after installing the HockeyKit 2.0 server on my MacBook Pro - when calling localhost/AppsBase/Public/index.php ........

    Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting '{' in /Library/WebServer/Documents/AppsBase/includes/logger.php on line 6 /* which points to the "Class Logger" line */

    Apparently this is a known issue and relates to 'double colons' and is related to a bug in Zend

    Has anyone seen this, and knows of a workaround? I'm running HockeyKit 2.0 (downloaded this morning from github) on a MacBook Pro OSX Lion 10.7.2

    1. PHP Steve-Howies-MacBook-Pro:includes Scotty$ php -v PHP 5.3.6 with Suhosin-Patch (cli) (built: Sep 8 2011 19:34:00) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

    This is the builtin PHP interpreter NOT the MacPorts one.

    1. APACHE Steve-Howies-MacBook-Pro:sbin Scotty$ ./httpd -v Server version: Apache/2.2.20 (Unix) Server built: Sep 8 2011 18:13:15

    Suggestions?

    Thanks,

    Steve

    opened by haggisman 10
  • authtype forcing multiple password checks

    authtype forcing multiple password checks

    When I use basic authtype in my root .htaccess file to force a password on the main site, I get the credential check and then I see the main page. Problem is after I click on an app to install it in my iPad with 5.0.1, I get two more authentication challenges, then puts an icon on my iPad desktop to start installing. Then get two more auth challenges and then after success on all that it installs. Am I missing something? I can force the authentication on the root index.php only, however that's kind of a false sense of security when the actual IPA's would be wide open for download by anyone with the right URL.

    JR

    opened by jriker1 8
Owner
Bit Stadium GmbH
Bit Stadium GmbH
LaunchKit - A set of web-based tools for mobile app developers, now open source!

LaunchKit This repo contains an unbranded version of all the code that once powered LaunchKit. This notably includes Screenshot Builder, a web UI for

LaunchKit 2.2k Dec 29, 2022
ScreenshotFramer - Create localized App Store screenshots

ScreenshotFramer With Screenshot Framer you can easily create nice-looking and localized App Store Images. How does it work? It's super simple: Screen

IdeasOnCanvas GmbH 699 Dec 16, 2022
Fastlane - 🚀 The easiest way to automate building and releasing your iOS and Android apps

fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and relea

fastlane 36.2k Jan 8, 2023
A replacement for as which runs in constant time instead of O(n) when the conformance is not satisfiedA replacement for as which runs in constant time instead of O(n) when the conformance is not satisfied

ZConform A replacement for as? which runs in constant time instead of O(n) when the conformance is not satisfied. How it works ZConform does a one-tim

Emerge Tools 20 Aug 4, 2022
The new Hockeyapp Deploy step.

Hockeyapp Deploy The new Hockeyapp Deploy step. How to use this Step Can be run directly with the bitrise CLI, just git clone this repository, cd into

null 6 Oct 5, 2021
An *Unofficial* Uitzending Gemist application for Apple TV 4 (**deprecated, use TV Gemist ☝🏻**)

Uitzending Gemist UitzendingGemist is an unofficial native Uitzending Gemist and NPO Live application for the Apple TV 4 developed in Swift. It will a

Jeroen Wesbeek 47 Jul 20, 2022
Amplitude Analytics 0 Feb 1, 2022
Patched sdks that include private framework tbds.

sdks Patched sdks that include private framework tbds. This repository contains patched iOS SDKs containing private symbols. These were removed from o

Chris Harper 14 Dec 4, 2022
[Deprecated] A shiny JSON parsing library in Swift :sparkles: Loved by many from 2015-2021

?? Deprecation Notice ?? Gloss has been deprecated in favor of Swift's Codable framework. The existing Gloss source is not going away, however updates

Harlan Kellaway 1.6k Nov 24, 2022
This provides a bridge to use Sync with Tokamak instead of SwiftUI

Sync Tokamak This provides a bridge to use Sync with Tokamak instead of SwiftUI.

Mathias Quintero 5 May 7, 2022
A better SwiftUI Picker Use _Picker instead of Picker

BetterPicker A better SwiftUI Picker. Use _Picker instead of Picker. Create styles with _PickerStyle. The is a WIP This library is currently a work-in

Eric Lewis 17 Dec 14, 2022
An easy way to access reviews for your app instead of writing repetitive and redundant codes for every app.

AppStoreReviewManager An easy way to access reviews for your app instead of writing repetitive and redundant codes for every app. Requirements iOS 9.0

Jinya 4 Dec 23, 2022
This iOS framework allows settings to be in-app in addition to or instead of being in the Settings app.

InAppSettingsKit InAppSettingsKit (IASK) is an open source framework to easily add in-app settings to your iOS or Catalyst apps. Normally iOS apps use

Ortwin Gentz, FutureTap 3.1k Jan 2, 2023
SwiftySideMenu is a lightweight and easy to use side menu controller to add left menu and center view controllers with scale animation based on Pop framework.

SwiftySideMenu SwiftySideMenu is a lightweight, fully customizable, and easy to use controller to add left menu and center view controllers with scale

Hossam Ghareeb 84 Feb 4, 2022
React Native utility library around image and video files for getting metadata like MIME type, timestamp, duration, and dimensions. Works on iOS and Android using Java and Obj-C, instead of Node 🚀.

Qeepsake React Native File Utils Extracts information from image and video files including MIME type, duration (video), dimensions, and timestamp. The

Qeepsake 12 Oct 19, 2022
An Integer type that clamps its value to its minimum and maximum instead of over- or underflowing.

ClampedInteger An Integer type that clamps its value to its minimum and maximum instead of over- or underflowing. Examples let big = ClampedIntege

Berik Visschers 0 Jan 17, 2022
A customizable, full-feature, lightweight iOS framework to be used instead of UIAlertController.

A customizable, full-feature, lightweight iOS framework to be used instead of UIAlertController.

Ali Samaiee 11 Jun 6, 2022
Create macOS apps with Swift packages instead of Xcode projects

Swift Bundler A Swift Package Manager wrapper that allows the creation of MacOS apps with Swift packages instead of Xcode projects. My motivation is t

null 182 Dec 25, 2022
KYWheelTabController is a subclass of UITabBarController.It displays the circular menu instead of UITabBar.

KYWheelTabController KYWheelTabController is a subclass of UITabBarController.It displays the circular menu instead of UITabBar. Installation CocoaPod

kyo__hei 121 Oct 10, 2022
Team Kodi 15k Jan 8, 2023