Kategorien
iPhone/iOS

IOS überprüfen, ob eine Kamera vorhanden ist

Da die Apps auf allen IOS Geräten funktionieren müssen, wozu auch der iPod Touch gehört, der keine Kamera in den älteren Versionen enthält, sollte Folgendes beachtet werden:

  1. Bei notwendiger Verwendung der Kamera innerhalb der App, muss in der foo-Info.plist ein Vermerk unter Required device capabilities gemacht werden. Dann wird die App nur für Geräte installiert und angezeigt, die eine Kamera haben.
  2. Bei einer möglichen Verwendung der Kamera, sollte dies im Code geprüft werden:
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO){
            NSLog(@"Kamera nicht vorhanden");
        }
        else{
            NSLog(@"Kamera vorhanden");
        }
Kategorien
iPhone/iOS WordPress

iPhone Oberfläche für WordPress

Mit dem Plugin WPtouch ist das kinderleicht erledigt und funktioniert bestens. Gerade habe ich das Plugin für meinen Blog installiert und bin begeistert.

20110819-101522.jpg

Kategorien
iPhone/iOS

Erstellen einer zweiten Lite Version einer App

Wenn man ein Projekt kopieren will, um bspw. eine Lite-Version einer App zu erstellen, muss man folgende Schritte durchführen:

  1. kopieren des Projekt Verzeichnisses
  2. Projekt umbennen in Xcode: Project->Rename
  3. erstellen einer neuen App ID auf http://developer.apple.com/
  4. ändern der eingegebenen Bundle ID in der foo-Info-plist
  5. löschen des build-Ordners des Projektes in der Terminal Konsole mit dem folgenden Befehl. Natürlich muss man sich im Projekt Verzeichnis befinden dafür. Die Xcode Funktion „Clean all Targets“ reicht leider nicht aus.
rm -rf build/
Kategorien
iPhone/iOS

Grundlagen für die iPhone Entwicklung (IOS)

Apple macht es einem nicht einfach, die Firma zu mögen. Besonders als Entwickler für das (wirklich tolle) iPhone werden einem verschiedenste Stolpersteine in den Weg gelegt:

  1. Entwickelt werden darf nur auf einem MAC und der kostet bekanntlich. Ältere und erschwinglichere MACs sind ausgeschlossen, weil ein aktuelles MAC OS installiert werden muss (Minimum 10.5 für Xcode 3.26).
  2. Man muss eine Lizen kaufen für 100$ (im Jahr!), wenn man seine Apps, bevor man sie in den App Store stellen will, auch mal auf seinem iPhone testen will.
  3. Das iPhone kostet einen Haufen Asche  🙂
  4. Sprache Objective C ist noch aus den 80er Jahren und das merkt man auch, trotz objektorientiert, ich sag nur Garbage Collector und Fehlermeldungen, mit denen man nichts anfangen kann (manchmal einfach auch garkeine Fehlermeldung, oder nur den sigbert).
  5. Soll die App auch im App Store bleiben, muss die Entwicklerlizenz jedes Jahr neu gekauft werden, d.h. 100$ pro Jahr Gebühren. Allerdings kann man dafür so viel Apps reinstellen wie man will.
  6. wenn alles überlebt ist: Der App Strore
Kategorien
iPhone/iOS

Worauf muss geachtet werden um die App in den App Store zu bekommen?

Wenn man die Grundlagen heil ohne Genickschuss überstanden hat, muss man auch noch persönlich an Apple vorbei. Bei der Lektüre der „App Store Review Guidelines“ von Apple, aus dem alle folgenden Zitate stammen, bin ich schließlich auf so lustig-dreiste Dinge gestoßen, dass ich das posten musste 🙂

Aus der Einleitung:

  1. „Wir (Apple) haben mehr als 350.000 Apps im App Store. Wir brauchen keine langweiligen Apps“ (Original: Fart apps, was man mit langweilig oder Pups übersetzen kann).
  2. Wenn die App nichts Praktisches macht oder nur kurzweiliges Entertainment bietet, kann die App abgelehnt werden.
  3. Apps, die zum Rauchen auffordern, werden abgelehnt.
  4. Jede App, die eine andere Plattform (als den App Store, Ovi-Store z.B.) nur benennen, fliegen raus.
  5. Wenn die App nur vorschlägt das iPhone nach der App Installation neu zu starten, kommt sie erst garnicht dazu 🙂
  6. Und der Hammer: Die Geodaten (wo befindet sich der User gerade), dürfen nur  benutzt werden, wenn es relevant für die App ist. Demnach müsste Apple wohl selber aus dem App Store fliegen 🙂
  7. Selbst, wenn das Design oder die Usability nicht sehr gut ist, gibts Stress, Zitat: „If your user interface is complex or less than very good, it may be rejected.“
  8. Verboten ist auch, den User dazu zu animieren, sein iPhone zu beschädigen: „Apps that encourage users to use an Apple Device in a way that may cause damage to the device will be rejected.“
  9. Schade ist Folgendes 🙂 : Apps containing pornographic material, defined by Webster’s Dictionary as „explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings“, will be rejected. Was kann den dieser „Porno“ dafür?
  10. Die App darf nicht zum Trinken am Steuer auffordern 🙂

Die Liste kann ich jedem nur empfehlen. Ich bin gespannt, ob meine App, trotz dieser sehr hohen Barrieren, es in den App Store schafft, besonders Punkt 8 bis 10 machten einige Änderungen notwenig. Tschakka.

 

Kategorien
iPhone/iOS

iOS Sound wird im Simulator abgespielt, aber nicht auf dem Test Device

Wer die folgende Fehlermeldung auf seinem Device (iPhone) bekommt, obwohl alles ohne Probleme lief im Simulator, der begibt sich auf eine unendliche Reise durch das Internet.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x3101b64f __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x34b36c5d objc_exception_throw + 24
    2   CoreFoundation                      0x3101b491 +[NSException raise:format:arguments:] + 68
    3   CoreFoundation                      0x3101b4cb +[NSException raise:format:] + 34
    4   Foundation                          0x34869e2f -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 74
    5   Foundation                          0x3487c9cb +[NSURL(NSURL) fileURLWithPath:isDirectory:] + 34

Der Code sieht so aus:

NSURL* aFileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"beep" ofType:@"wav"] isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &_scanSuccessSound);

Dabei ist die Lösung relativ einfach. Es gibt ein Kontextmenü, in dem man einstellen kann, welcher Dateien auf das Device kopiert werden sollen. Dieses ist erreichbar über: rechte Maustaste auf Grups & Files oben links in Xcode und dann sollte das passende Häckchen dort gemacht werden.

iphone_nsurl fileurlwithpath_nil string

Eine andere Fehlerquelle ist, dasss die Datei nicht in das Projektverzeichnis(Destination Folder) kopiert wurde, dies kann man durch löschen und erneutes einfügen der Datei in Xcode mit dem passenden ersten Häckchen wieder bereinigen.