Git Product home page Git Product logo

hockeykit's Introduction

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:

hockeykit's People

Contributors

alexbirkett avatar alloy avatar ashtom avatar bastianh avatar brianantonelli avatar christianmarth avatar codedifferent avatar derandereandi avatar diederich avatar evertoncunha avatar fabianfrank avatar futuretap avatar holtwick avatar iosdeveloper avatar jramer avatar ksuther avatar macguru avatar mackross avatar mk avatar moole6 avatar pburleson avatar piobyz avatar soph avatar soryu avatar steipete avatar toco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hockeykit's Issues

Update check fails if version string contains a space

I just recently updated to the version of Hockey that includes stats, and I noticed that if your apps version number contains spaces while sending app data, it will fail.

A quick enough fix is to escape the parameter:

    [parameter stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

Crash while opening update View

Here's a crash log I got during one of my app's beta test. Unfortunately I don't know your source code good enough to address the issue on my own...

Application Specific Information:
*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <BWHockeyViewController 0xec43710> for the key path "checkInProgress" from <BWHockeyManager 0x442800> because it is not registered as an observer.'

Thread 0 Crashed:
0   libsystem_kernel.dylib              0x3558f00c __kill + 8
1   libsystem_c.dylib                   0x35645f95 raise + 17
2   Daedalus Beta                       0x00095ab9 uncaught_exception_handler (PLCrashReporter.m:137)
3   CoreFoundation                      0x309807d3 __handleUncaughtException + 239
4   libobjc.A.dylib                     0x3449d06b _objc_terminate + 103
5   libstdc++.6.dylib                   0x35626e3d __cxxabiv1::__terminate(void (*)()) + 53
6   libstdc++.6.dylib                   0x35626e91 std::terminate() + 17
7   libstdc++.6.dylib                   0x35626f61 __cxa_throw + 85
8   libobjc.A.dylib                     0x3449bc8b objc_exception_throw + 71
9   CoreFoundation                      0x30980491 +[NSException raise:format:arguments:] + 69
10  CoreFoundation                      0x309804cb +[NSException raise:format:] + 35
11  Foundation                          0x341f0125 -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 545
12  Foundation                          0x341efe79 -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 121
13  Daedalus Beta                       0x00070ec9 -[BWHockeyViewController viewDidUnload] (/Other/HockeyKit/BWHockeyViewController.m:461)
14  Daedalus Beta                       0x0006fcb5 -[BWHockeyViewController dealloc] (/Other/HockeyKit/BWHockeyViewController.m:250)
15  CoreFoundation                      0x308e4c43 -[NSObject(NSObject) release] + 31
16  CoreFoundation                      0x308e51a1 CFRelease + 69
17  CoreFoundation                      0x308eaba9 -[__NSArrayM dealloc] + 93
18  CoreFoundation                      0x308e4c43 -[NSObject(NSObject) release] + 31
19  UIKit                               0x30a61e65 -[UINavigationController dealloc] + 125
20  CoreFoundation                      0x308e4c43 -[NSObject(NSObject) release] + 31
21  Daedalus Beta                       0x0006aa89 -[BWHockeyManager showUpdateView] (/Other/HockeyKit/BWHockeyManager.m:413)
22  CoreFoundation                      0x308f0571 -[NSObject(NSObject) performSelector:withObject:withObject:] + 25
23  UIKit                               0x309feec9 -[UIApplication sendAction:to:from:forEvent:] + 85
24  UIKit                               0x309fee69 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 33
25  UIKit                               0x309fee3b -[UIControl sendAction:to:forEvent:] + 39
26  UIKit                               0x309feb8d -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 357
27  UIKit                               0x309ff423 -[UIControl touchesEnded:withEvent:] + 343
28  UIKit                               0x309fdbf5 -[UIWindow _sendTouchesForEvent:] + 369
29  UIKit                               0x309fd56f -[UIWindow sendEvent:] + 263
30  UIKit                               0x309e6313 -[UIApplication sendEvent:] + 299
31  UIKit                               0x309e5c53 _UIApplicationHandleEvent + 5091
32  GraphicsServices                    0x30269e77 PurpleEventCallback + 667
33  CoreFoundation                      0x30957a97 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 27
34  CoreFoundation                      0x3095983f __CFRunLoopDoSource1 + 167
35  CoreFoundation                      0x3095a60d __CFRunLoopRun + 521
36  CoreFoundation                      0x308eaec3 CFRunLoopRunSpecific + 231
37  CoreFoundation                      0x308eadcb CFRunLoopRunInMode + 59
38  GraphicsServices                    0x3026941f GSEventRunModal + 115
39  GraphicsServices                    0x302694cb GSEventRun + 63
40  UIKit                               0x30a10d69 -[UIApplication _run] + 405
41  UIKit                               0x30a0e807 UIApplicationMain + 671
42  Daedalus Beta                       0x00002fdf main (/Source/Other/main.m:13)

ipa File in subfolder is being linked wrong

We have several clients and have therefore stored our apps in different folders. This works until the download of the app. The URL in the plist file points to the main public folder. And because of the mod_rewrite it gets redirected to index.php.
so the app is for example in
http://server/clients/client1/bundleidentifier/app.ipa
but the generated plist links to
http://server/bundleidentifier/app.ipa

I tried some workaround and actually got the right path but that didn't work either.

RSS Feed Link

Currently the RSS feed entries all point to 'feed.php', but it should be 'index.php'. To differentiate between versions the URL should become unique e.g. by appending the apps name and version like 'index.php#hockey1.0' (especially in ...).

Why? The user likes to be directed from the entry to the landing page to start the download/installation. E.g. Reeder directs me to the empty feed page when clicking on the title.

Thanks Andreas.

Always shows update avaliable...

I am having a problem with HockeyKit in one of my projects. It seems that each and everytime I launc the app, it asks to update, when the version is the same number.

CFBundleShortVersionString = 1.0
CFBundleVersion = 1.0.51

I am using Xcode 4, but am generating my .plist manually, and my bundle-version is:
bundle-version
1.0.51

Not sure what my problem might be. Where should I try and troubleshoot next?

No action when choosing to auto-update, crash when checking settings

I have Hockey in my app, and the server side stuff is working great. But on the client side, I am getting the pop-up to alert the user of a new version, but when they say yes, nothing happens. The pop-up is dismissed, and that's all. I have let it sit for a good 20 minutes, and nothing happens. Then, if I go the the beta section of my settings page (which loads BWHockeyViewController), I get a crash. According to the crash report, it's getting EXC_CRASH (SIGABRT) when trying to populate the tableview. Specifically, cellForRowAtIndexPath.

I have the most recent version of the Hockey Client (pulled today)

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)

Nginx config (app not listed on the index page).

Hi,
I can't wait to use Hockey with my beta-testers, but I encountered some issues with configuration under Nginx.

Below is my config, I can access an index page "Install Apps" and "App Statistics" (/stats has restricted access and I prevent from direct userlist.txt access).
However, despite having a directory with my bundle id created (with .ipa and .mobileprovision files) in the same dir where index.php, config.php etc. files exist I don't see any apps listed when I access the site from my mac or iPhone.

Is there still something wrong with my nginx config? How can I check what can be wrong? Any ideas what should I check in order to have my app being listed on the index page?

For clarity, dirs structure is:
public server dir -> com.byzia.myappbundle->myappbundle1->{.ipa && .mobileprovision}

includes dir is under public server dir/../private/includes

Nginx config:

server {
listen 80;
server_name beta.***;

access_log  ***/access.log;
error_log   ***/error.log;

root        ***/public;
index       index.php index.html index.htm;

auth_basic_user_file ***/basic-password;

## MIME types
types {
  text/xml plist;
  application/octet-stream ipa;
}

location /stats {
    auth_basic "Restricted";
}

rewrite /stats/userlist.txt$ /stats;

# Pass the PHP scripts to FastCGI server
# listening on 127.0.0.1:9000
location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        /usr/local/nginx/conf/fastcgi_params;
}

# Static files.
# Set expire headers, Turn off access log
location ~* \favicon.ico$ {
    access_log off;
    expires 1d;
    add_header Cache-Control public;
}
location ~ ^/(img|cjs|ccss)/ {
    auth_basic off;
    access_log off;
    expires 7d;
    add_header Cache-Control public;
}

# Deny access to .htaccess files,
# git & svn repositories, etc
 location ~ /(\.ht|\.git|\.svn) {
    deny  all;
}

}

And output of $router and $apps vars as print_r from public/index.php:

Router Object
(
[controller] =>
[action] =>
[arguments] =>
[api] => 1
[servername] => beta.***
[args] => Array
(
)

[args_get:protected] => Array
    (
    )

[args_post:protected] => Array
    (
    )

[args_files:protected] => Array
    (
    )

[baseURL] => http://beta.***
[app] => AppUpdater Object
    (
        [appDirectory] => ***/beta.***/public/
        [applications] => Array
            (
            )

        [logic] => 
    )

)
AppUpdater Object
(
[appDirectory] => _/beta._/public/
[applications] => Array
(
)

[logic] => 

)

Providing individual pages for each or selected applications

In the documentation.mdown file, I see the following line:

  • By default all available applications appear in a single web page, but there is also an option to provide individual pages for each or selected applications.

Where is this configuration setting? I can't seem to find it.

Thanks,
Dave

Crash when subtitle is missing in plist

When subtitle is missing, the attempt to save the dictionary in user preferences fails (due to the nil) and the app crashes when trying to open the update page.

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.

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

small memleak

char *machine = malloc(sizeof(char) * size);

I think this buffer is never freed.

[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
...

Faild to install app after server setup

Hi,
i just finished to setup my server (well, i think so :) but after i'm installing the provision and pressing in "install" to install my app beta nothing happens.

i don't usually use PHP and servers stuff, so i guess i made something wrong on the processes, i also unable to get the stats/index.php file (500 error) - that problem start after i tried to edit the .htpasswd file.

Please help me.
Thanks !
Amir.

Issue with installing mobile provision

Hello,

I had to do the following change to get the mobile provision installing on the device.
This is like a quick fix. I think the real problem lies inside the main.php, but I'm not that fluent in PHP so I was glad that I somehow got it working.
https://gist.github.com/703193

The problem might have to do something with my setup. I moved the include folder to ../../includes/hockey. Maybe that caused the issue?..

Thanks
Ullrich

Does not work together with basic auth protection

Hi,

I installed hockey kit for my android app and setup basic auth in my apache config to protect my /var/www/hockey-kit directory, so that only authorized users can download my app. I am using apache as webserver on a linux machine.

Once I activate the basic auth protection access to the main download page is possible after entering the correct credentials however the download then fails on all android devices I tested so far with a "Download unsuccessful" error (shown in the Download Manager) - no further details given. When I deactivate basic auth again it works fine again.

Here's a look in my apache config:

<Location /hockey-kit>
Options All
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

            AuthType Basic
            AuthName "Login"
            AuthUserFile /opt/hockey-kit/users
            Require valid-user

</Location>

Inspecting the apache access log shows that the .apk file is somehow accessed by android without passing the entered credentials along (there are 3 downloads in total). Here's a snippet from the log of what happens when I click on the download link:

myserver.com:80 62.12.140.99 - - [11/Aug/2011:10:47:22 +0200] "GET /hockey-kit/api/2/apps/myapp?format=apk HTTP/1.1" 401 614 "http://myserver.com/hockey-kit/" "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
myserver.com:80 62.12.140.99 - mono [11/Aug/2011:10:47:22 +0200] "GET /hockey-kit/api/2/apps/myapp?format=apk HTTP/1.1" 200 31196 "http://myserver.com/hockey-kit/" "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
myserver.com:80 62.12.140.99 - - [11/Aug/2011:10:47:23 +0200] "GET /hockey-kit/api/2/apps/myapp?format=apk HTTP/1.1" 401 786 "-" "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"

Am I doing something wrong here or is this a known bug? How do you suggest to protect a hockey kit instance?

Sorting apps by version number

I would like to sort the available apps by the version number so that the latest app will be displayed at the top of the page. Is there a way to do this currently?

HockeyKit 2.0 ~ Settings aren't saved

Just upgraded to latest stable HockeyKit release (2.0).
Now, the user settings (Send User Data/Send Usage Data) aren't saved.
As soon as I kill my app in multitasking bar and reopen it, the settings are back to default.
Instead, Check For Update is properly saved and restored.

Empty line in config.php cause script to generate wrong files

Adding an empty line to the config.php at the end of the file causes Hockey to include an empty line at the beginning of each file it generates (IPA, provisioning profile, manifest).

Empty lines at end of files are an UNIX standard. Despite that the corresponding function should ignore empty lines.

Mail when installed by tester

Feature idea:

Would be great to optionally get an email when a tester installed the app. This way you get a better real time feeling about the reception of the beta apps.

RSS Feed

You could easily add a RSS feed to the overview page so beta testers could subscribe to it e.g. using Google Reader and get notified on changes. I think a history is not needed, so this could be implemented straight forward. Thanks.

Beta Automatisation fails

The changes I made to "Beta Automatisation.sh":

ftpUsername="username"
ftpPassword="password"
ftpServerDirectoryPath="server.tld/directory"

scpUser="username"
scpHost="server.tld"
scpPath="/directory"

The error I receive everytime I build my app:

Uploading MyApp.ipa and MyApp.plist to server.tld...
ssh: connect to host server.tld port 22: No route to host
lost connection
ssh: connect to host server.tld port 22: No route to host
lost connection

Any ideas what's going wrong?

Crash Reports

It would be nice if HockeyKit could catch, symbolocate and publish crash reports to the server...

Add support in server for download link to only latest file

The server code picks up the first file it finds with .plist and .ipa. Please consider changing the code main.php in includes folder to iterate through all available files and pick up only the latest one.

This would make it a much easier task to upload a fresh build - fire and forget with a batch file would be really easy. Currently I am solving this problem by deleting all files in the app's folder on the server using rsync, in my batch file, but it feels... hackish in an otherwise excellent mechanism. :)

Really great work making this framework, I am not really using the framework on the client side, but just the server code - didn't particularly care to have auto-update in the client (and risk forgetting to add an #ifdef somewhere).

Please keep up the good work,
Regards,
Dhiraj.

P.S. In case other people would like to use my rsync workaround, here's my 1 line rsync command, simply dump into an .sh file, give it execute permission, and you're set. :)
Of course, the command is to be used at your own risk, please be careful what you put in the TARGET_PATH, rsync will delete everything in that folder.

rsync -z -i -u -vv -h -r --progress --delete /FULL_SOURCEFOLDER_PATH/ USER@SERVER:/TARGET_PATH/

HockeyKit + AppStore

Hi,

First of all, thanks for your work HockeyKit, it is really useful! and well designed.

I have a small feature suggestion / proposal, the main idea would be to use HockeyKit on AppStore too :

Why :

  • Easier to set up / archive / deploy your app, with only one build config.
  • If a beta tester installs accidentally an AppStore version, he would still have beta updates > no need to deploy two app identifiers with two apps installed on device, which is complex for everyone, especially testers.

How :

  • Of course only beta users should get betas. (an HK server side UDID check could easily do the job)
  • All users could even be notified of a new AppStore version, which could be great. (would require some server side work to declare current AppStore version)

Let me know what you think about this!

Vincent.

Select a version to download

I've got your multi-version support set up, but I'd like users who have access to multiple versions to be able to select a version to download, for example to choose between a release candidate and a future release version.

Crashes with NSURLConnection delegate

if controller is showed and hidden too fast, the app crashes:

Thread 0 Crashed:
0 libobjc.A.dylib 0x00003466 objc_msgSend + 18
1 Foundation 0x0003280d -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 69
2 Foundation 0x0003278f NSURLConnectionDidFinishLoading + 79
3 CFNetwork 0x0000f485 URLConnectionClient::clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue) + 137
4 CFNetwork 0x000041f9 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo
, long) + 101
5 CFNetwork 0x00004381 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo_, long) + 493
6 CFNetwork 0x000040eb URLConnectionClient::processEvents() + 71
7 CFNetwork 0x0000409d URLConnection::multiplexerClientPerform(RunLoopMultiplexer_) + 37
8 CFNetwork 0x0000401b MultiplexerSource::perform() + 127
9 CFNetwork 0x00003f99 MultiplexerSource::_perform(void*) + 9
10 CoreFoundation 0x000567dd CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 13
11 CoreFoundation 0x000285b7 __CFRunLoopDoSources0 + 383
12 CoreFoundation 0x00027e5b __CFRunLoopRun + 231
13 CoreFoundation 0x00027c87 CFRunLoopRunSpecific + 231
14 CoreFoundation 0x00027b8f CFRunLoopRunInMode + 59
15 GraphicsServices 0x000044ab GSEventRunModal + 115
16 GraphicsServices 0x00004557 GSEventRun + 63
17 UIKit 0x00037329 -[UIApplication _run] + 413
18 UIKit 0x00034e93 UIApplicationMain + 671

seems the delegate is not cleared out?

server PHP script corrupts IPA file during download

Not sure if this is really a bug in Hockey or just in my server setup.

Whenever I try to pull the IPA file via the "Download Applicaiton" link,
the server script mangles it by inserting line breaks at the beginning of the file (offset 0000: 0x0A 0x0A ...), truncating two null bytes at the end.

I double checked that the file on the server hasn't been corrupted before (same sha1 hash). Downloading it directly via it's absolute URL also works fine.

It really seems like the php script is "injecting" those two extra 0x0A0A bytes and truncating the tail accordingly.

Any ideas?

used version: e781848...

mobileprovision per version

As far as I understood mobileprovision file is not supported per version. I think this is problematic, because provisions may change between versions and we may want to keep them. So I changed some files to make this possible. If this is really the case for many people, change can be integrated. I can send my diff file if you are interested.

Support for Xcode4 xcarchive format

Hello,

Since Xcode 4 is golden master now it would be nice to support it's xcarchive format.
Did you already have a look into it?

Best,
Ullrich

HTTPS issues

Hi

I've got some issues on an hockey server installed on an HTTPS server (with a real certificat, not self-signed).
When I touch the button "install" on an iPhone nothing happen.

I try to copy the link and I've got somethink like:
itms-services://?action=download-manifest&url=http%3A%2F%2Fmy_server.com%3A443%2Findex.php
(I also get it by displaying itms-services://?action=download-manifest&url=)

Notice the "http..... :443" instead of "https..."

So I made some modification in the index.php for the $protocol and $port variable:

$protocol = $_SERVER['HTTPS']==on?'https':'http';

$port = in_array($_SERVER['SERVER_PORT'],array(80,443))?'':':'.$_SERVER['SERVER_PORT'];

the install did start but finaly fail and ask for retry (which also fail)

[issue #38 re-opened] server PHP script corrupts IPA file during download

Not sure if this is really a bug in Hockey or just in my server setup.

Whenever I try to pull the IPA file via the "Download Applicaiton" link,
the server script mangles it by inserting line breaks at the beginning of the file (offset 0000: 0x0A 0x0A ...), truncating two null bytes at the end.

I double checked that the file on the server hasn't been corrupted before (same sha1 hash). Downloading it directly via it's absolute URL also works fine.

It really seems like the php script is "injecting" those two extra 0x0A0A bytes and truncating the tail accordingly.

Any ideas?

used version: e781848...

see also: https://github.com/TheRealKerni/Hockey/issues/closed/#issue/39

Cannot find protocol declaration for 'BWHockeyManagerDelegate'

Building the develop or master branch iOS demo with AppStore_Distribution config fails:

In file included from /Users/username/Downloads/TheRealKerni-HockeyKit-553a0c4/demo/iOS/Classes/HockeyDemoAppDelegate.m:9: /Users/username/Downloads/TheRealKerni-HockeyKit-553a0c4/demo/iOS/Classes/HockeyDemoAppDelegate.h:17:69: error: cannot find protocol declaration for 'BWHockeyManagerDelegate' @interface HockeyDemoAppDelegate : NSObject <UIApplicationDelegate, BWHockeyManagerDelegate> { ^ 1 error generated.

All other configs do work.

server/php/README correction

Hi there,

the app icon on the server side should have the extension ".png", right?
So the following sentence in "server/php/README" is IMHO incorrect:

If you want to web interface to show the app icon, upload the icon into the subdirectory on the server, it is important to have an extension ".ipa" (optional)
                                                                                                                                              ^^^^^

Greetings and keep up the great work!

Feature Request: Stats and password protected server

Hi there,

is there any chance to run the stats function of the server component on a password protected (apache / .htaccess) server?

The initial installation of an application (by using safari) works fine with a password protection (apart from the fact, that the password dialogue pops up twice which is AFAIK an iOS problem) but there are no settings available reporting the "stats" to a password protected server yet, right?

Greetings and keep up the good work ;)

Not able to get client side updater to work

I'm having trouble getting this to work on the iPhone side of things.

I have the server set up, and am able to install provisioning profiles and apps from the server, but the app isn't able to see new versions. When I click the "Check for Updates" button, it goes into the process of pulling the info, but doesn't get past this if statement:

if ([result compare:@"-1"] != NSOrderedSame && [result compare:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]] != NSOrderedSame)

Here is the response I get back from the server if I type the same query into Google Chrome:

{"profile":1282667060,"title":"Hops","subtitle":null,"result":"0.97"}

What exactly have I failed to set up?

Notes not included in json response.

The HTML notes are not included in th json response.

In main.php line 305 and 306 please substitute:

($this->appDirectory . $note)

with:

($note)

RewriteRule doesn't work if installed in a subdirectory

I'm running the feature/redesign branch, and I have it installed under /builds on my web server. Trying to load the application from the web page results in a 404, with this error in my log:

File does not exist: /path/to/webroot/builds/api, referer: http://myserver.com/builds/

It also seems that the .* pattern prevents the stats page from displaying.

Changing the RewriteRule in https://github.com/TheRealKerni/HockeyKit/blob/feature/redesign/server/php/public/.htaccess to the following fixes both issues:

RewriteRule api/.* /builds/index.php [L]

I don't know if there's a way to write the RewriteRule more generically so it'll work in any subdirectory.

Strange path for provision files?

When clicking on the buttons to download a provision profile, we're getting 404 errors due to what appear to be incorrect paths generated by the main index.php file:

The requested URL /hockey/api/2/apps/com.xxx.yyy was not found on this server.

Why is is inserting api/2/apps? This doesn't seem correct?

Thanks,

Andy

Use standard language codes in bundle

Noticed the bundle has English.lproj and German.lproj. Could that be changed to en.lproj & de.lproj instead? (my app check scripts are a bit picky)

iOS 5 iPad not supported

Hey,

I'm using the latest files from master branch.
Unfortunately, it seems like an iOS 5 iPad is detected as not supported.
Which lines do I have to change to make it work?

Thanks!

Extract UDIDs

Hi, I wrote a little Python script that helps extracting the UDIDs and names of the registered devices. You might want to add this or something similar to Hockey. Cheers Dirk

data = """

    PASTE HTML SOURCE CODE OF THE FOLLOWING PAGE HERE
    https://developer.apple.com/ios/manage/devices/index.action

"""

import re

udids = re.findall("<td class=\"id\">([^<]+)</td>", data)
names = re.findall("<td class=\"name\">.*?<span>([^<]+)", data)

for i in range(len(udids)):
    print "%s;%s" % (udids[i], names[i])

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.