Icon specified in the Info.plist not found under the top level app wrapper: Icon.png

Kleiner Fehler, große Wirkung, wer beim Submitten einer App an Apple die Fehlermeldung erhält:

Icon specified in the Info.plist not found under the top level app wrapper: Icon.png

Darf sich erstmal freuen, die Fehlermeldung ist schwer zu beheben.

Im einfachsten Fall hat man wirklich vergessen, das Icon.png in das Projekt zu legen. Es ist darauf zu achten, dass das Icon bestimmte Kriterien erfüllen muss (nachzulesen unter: http://developer.apple.com/library/ios/#qa/qa2010/qa1686.html)

Wichtig, die Icon File muss im Root des Projektes liegen und die Groß- und Kleinschreibung muss beachtet werden. Es kann helfen, das Projekt komplett aufzuräumen über:

Build -> Clean All Targets

Zusätzlich kann man nach dem cleanen noch die Icons alle umbenennen z.B. in bIcon.png und dann wieder zurück nach Icon.png benennen. Danach wie gehabt

Build -> Build and archive

An Apple senden

Je nachdem, ob man eine iPad App erstellt gibt es folgende möglichen Icon Variationen die in der Info.plist Datei hinterlegt werden:

  • Icon.png (57×57px – iPhone und iPod Touch)
  • Icon@2x.png (114×114 – iPhone 4 Retina Display)
  • Icon-72.png (72×72 – iPad)
  • Icon-Small.png (29×29 – Settings app und Suchergebnisse auf iPhone und iPod Touch)
  • Icon-Small@2x.png (58×58 – Settings app und Suchergebnisse auf iPhone 4)
  • Icon-Small-50.png (50×50 – Suchergebnisse auf iPad)

 

Paypal iOS SDK

PayPal iphone / iOS SDK

PayPal iphone / iOS SDK

In der aktuellen Diskussion über die Abo-Gebühren von Apple, die inApp Beteiligungen die verlangt werden, geht voll unter das es auch noch andere Bezahlmöglichkeiten gibt.

Unter anderem bietet PayPal ein eigenes iPhone / iOS SDK an.

Dieses kann in jede App eingebunden werden und den Bezahlvorgang für Inhalte übernehmen. Beträge, Rechnungsposten, Steuer / Versandgebühren sind dabei sehr gut einstellbar. Im Fall einer erfolgreichen Zahlung erhält man von PayPal eine PayPal-Transactions-ID, womit der jeder Bezahlvorgang eindeutig ist.

Eingebunden wird das SDK sehr einfach: Downloaden, Add existing Files -> die *.a Datei und alle .h Dateien auswählen und importieren.

In dem Viewcontroller, in dem der Bezahlvorgang dann vonstatten gehen soll folgende include Anweisung:

#import „PayPal.h“

weitere Schritte können in der Doku von Paypal entnommen werden.

Was nicht ind er Dokumentation erwähnt ist: um das SDK nutzen zu können, bedarf es auch einer xml Lib. Wenn diese nicht vorhanden ist, bekommt man Fehlermeldungen im folgenden Stil:

„_xmlNodeListGetString“, referenced from:

-[ap_ReceiverIdentifier deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_Address deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_AddressList deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_CurrencyCodeList deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_CurrencyList deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_CurrencyConversionList deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_CurrencyConversionTable deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_DisplayOptions deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

-[ap_ErrorList deserializeElementsFromNode:] in libPayPalMEP.a(ap.o)

usw.

Dieses kann verhindert werden, indem man die libxml2.dylib als existing Framework einbettet / hinzufügt.

Facebook lässt nun auch Posts im Namen einer Seite zu

Facebook hat heute Morgen an viele Facebook-Seitenbetreiber die wöchentlichen Aktualisierungen geschickt mit einem netten Hinweis über neue Funktionen:

Das Layout von Facebook-Seiten wird aktualisiert. Sie erhalten einige neue Funktionen, die dir bei der Interaktion mit deinen Freunden helfen. Hier sind ein paar der Neuerungen:

Benachrichtigungen, wenn Fans mit deiner Seite oder deinen Beiträgen interagieren

Fotos können oben auf deiner Seite angezeigt werden

Neuigkeiten für deine Seite

Möglichkeit, im Namen deiner Seite auf anderen Seiten auf „Gefällt mir“ zu klicken und dort Inhalte zu posten

Du kannst eine Vorschau für deine Seite aufrufen und die neue Version bereits früher verwenden. Alle Seiten erhalten am 10. März automatisch die neue Version.

D.h. wenn man eine administrierte Seite besucht, gibt es einen neuen Menüpunkt „Facebook unter dem Namen YXZ verwenden“ und schon bewegt man sich als xyz.

Unter diesem Namen kann man nun auf anderen Pages Beiträge, Fotos und Likes hinterlassen. Nicht möglich ist eine Interaktion mit anderen Personen.

In den eigenen Kontoeinstellungen kann man auch schnell die Identität wechseln.

Fazit: Schöne Sache um besser mit den Nutzern interagieren zu können.

iOS BetaBuilder Version 1.5 released

Das leidige Problem, wie verteile ich meine Entwicklungsstände von neuen Apps an Kunden / Tester / Freunde…

Die Antwort lag meistens in einer kleinen aber feinen Anwendung: BetaBuilder!

Mit diesem Tool wird das Verteilen von Software total einfach. Was man braucht ist ein AdHoc Zertifikat, welches Gültigkeit für alle Geräte besitzt, auf die man die App gerne hätte und Webspace zum verteilen der Software.

Man führt alle bekannten Schritte zur Generierung einer IPA Datei durch. Diese Datei lädt man dann im BetaBuilder und gibt an, unter welcher WebAdresse die App für die Kunden / Freunde / Tester zur Verfügung stehen wird.

Bei früheren Versionen musste diese Adresse jedes mal eingegeben werden, dies geschieht nun automatisch, ein echter Kompfort-Gewinn.

Nach dem Betätigen des „Generate Deployment Files“ wird eine HTML Datei etc. angelegt, welche dann auf den Webserver geladen werden. Von dort kann nun jeder Kunde / Tester die App über das iOS Gerät herunterladen und installieren.

Ein kleiner Tipp am Rande, wenn man statt eines Webservers Speicherplatz von Getdropbox nutzt und die Files vom BetaBuilder in ein Dropbox Verzeichnis erstellen lässt, spart man sich das hochladen.

Der Macher des BetaBuilders (HunterHillegas) hat den Quelltext der Anwendung auf GitHub bereit gestellt und erhofft sich dadurch eine schnellere Weiterentwicklung. Zusätzlich soll die Anwendung bald im Mac App Store verfügbar sein.

(via http://iphone-dev-tips.alterplay.com/2011/01/ios-betabuilder-dropbox-fastest-adhoc.html)

Update 2014: Apple hat mittlerweile nachgezogen und sein eigenes Produkt herausgebracht um die Beta-Verwaltung für Entwickler zu erleichtern. Apple nennt es „TestFlight„. Das TestFlight bassiert dabei auf der von Apple aufgekauften Firma TestFlight. Derzeit ist das Programm jedoch selbst noch in der Beta Version.

aycspush iPhone App für SysAdmins

aycspush logo

Aus dem Hause aycs ist mittlerweile eine neue App im AppStore angekommen – aycspush.

Der anvisierte Kundenkreis von aycspush sind in erster Linie System-Administratoren die verschiedene Server betreuen. Bisher wurden solche Systeme meistens überwacht indem Scripte eine E-Mail verschicken sobald ein Problem erkannt wird. Diese E-Mail muss von dem entsprechenden Admin aber aktiv gelesen werden. Alternativ bieten manche Systeme auch Schnittstellen an, um eine SMS zu schicken, diese kosten jedoch Gebühren.

aycspush vereinigt Vorteile aus beiden Bereichen. Die Generierten Nachrichten werden per E-Mail an das aycspush System gesendet, was eine hohe Kompatibilität zu unterschiedlichsten Zielsystemen gewährleistet, zum anderen werden die Nachrichten mittels Apples Push Dienst auf das iPhone, iPad oder iPod Touch gepusht und sind somit quasi sofort beim Admin.

Wie läuft das ganze nun ab?

Als erstes muss die App gekauft werden (0,79 Cent im AppStore)

Nach dem ersten Start der App wird gefragt, ob die App push Nachrichten senden darf, diese Frage muss mit Ja beantwortet werden.

Über die Info Seite erhält man nun die eindeutige Adresse seines Gerätes in Form einer E-Mail Adresse. diese setzt sich aus einem eindeutigen Device Token und der Endung @aycspush.com zusammen. Diese Adresse kann ab jetzt in allen erdenklichen Scripten oder Geräten als Adresse für Statusmeldungen, Probleme oder Warnungen genutzt werden.

Empfangene Nachrichten erscheinen zum Einen als Push Meldung auf dem Home Screen, können zum Anderen auch in der Anwendung selbst aufgerufen werden, wobei auch Details zur Nachricht ersichtlich sind.

aycspush App Ansicht

Alles in Allem eine feine runde Sache

Update 2014:
Mittlerweile wird Aycspush nicht mehr aktiv entwickelt, ob Nachrichten noch zugestellt werden, vermag ich nicht zu sagen, da ich nicht mehr in diesem Bereich tätig bin.

UiTableview mit einer großen Menge an Zellen

Eine UiTableView ist ja generell für die Haltung von einer großen Anzahl an Elementen und deren Darstellung gedacht. Wer jedoch versucht eine wirklich große Zahl (1000+) in eine TableView zu setzen, wird unter Umständen feststellen, das dies enorm langsam passiert.

Die Lösung ist die Methode heightForRowAtIndexPath. Diese wird für jede Zelle neu aufgerufen, in diesem Fall also über 1000 mal, was eine enorme Ladezeit nach sich zieht.

Als Lösung, sofern alle Zellen gleich hoch sein sollen, kann die rowHeight auch bei Initialisierung der TableView gesetzt werden.

Kidsbox – iPhone App für Kinder

Kidsbox Logo

Kidsbox ist eine neue iPhone App im deutschen App Store.

Zielgruppe sind Eltern mit Kindern im Alter von 2-6 Jahren. Diese können mit der Kidsbox Töne aus ihrer Umwelt spielerisch lernen. Zum Start stehen kostenfrei Töne rund um den Bauernhof und Instrumente bereit. Gegen einen kleinen Obolus können Töne rund um den Ozean freigeschaltet werden.

Die App ist von der AYCS UG entwickelt worden und basiert auf dem three20 Framework. Das kindgerechte Design stammt von Markus Weber und die schönen Bilder wurden von ihm mit viel Liebe zum Detail von Hand gezeichnet.

(iphone Anwendung kostenlos im Deutschen App-Store erhältlich)

Screenshots:

GPS Distanz von Nutzer zu Punkt bestimmen

Um Die Distanz eines iPhone Users zu einem bestimmten Punkt zu bekommen, kann man die CLLLocation Methode getDistanceFrom wunderbar nutzen.
Vorraussetzung ist die Position des Gerätes. In der Methode

– (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation

kann dann folgender Codeschnipsel genutzt werden:

// hier die gewünschten GPS Koordinaten eingeben, die Beispieldaten sind von der Infinity Loop
CLLocation *DestinationLocation = [[CLLocation alloc]initWithLatitude:37.3307060 longitude:-122.0414486];

//Distanz in m berechnen
double dist = [newLocation  distanceFromLocation:festplatzlocation];

Um zu erkennen, ob der Nutzer innerhalb eines bestimmten Radiusses um einen Punkt ist, kann man eine maxdist definieren und danach darauf prüfen.

double maxdist = 3500;

if(dist<maxdist){

NSLog(@“kleiner“);
NSString *Distanzstring = [[NSStringalloc]initWithFormat:@“Distanz: %g (m)“,dist];
UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:nilmessage:Distanzstring delegate:selfcancelButtonTitle:@“OK“otherButtonTitles:nil]; [alert show];
[alert release];
}else {
NSLog(@“grösser“);
}

Deprecated ist die folgende Methode / Bestimmung der Distanz

//double dist = [newLocation getDistanceFrom:festplatzlocation] / 1000;

Fertig ist eine schöne und einfache Möglichkeit, die position des Nutzer zu verwenden.

(Corelocation.Framework muss natürlich in das Projekt eingebunden sein)

Xcode Custom Back Button Action

Wer in seiner iPhone / iPad App eine Navigation-Bar nutzt, wird vllt. irgendwann an den Punkt gelangen, an dem er, aus welchen Gründen auch immer, eigene Aktionen bei Betätigung des BackButtons durchführen möchte.

Sei es, dass Speicher sofort freigegeben werden soll, eine Audio-File sofort gestoppt oder Meldungen an den Nutzer ausgegeben werden sollen. Hierzu ist eine mögliche Lösung, den vorhandenen BackButton durch einen einen eigenen zu ersetzen.

Dieser Button führt bei Touch dann eine Methode aus, in der die eigenen Anweisungen stehen, abgeschlossen durch die Anweisung, das aktuelle Element aus dem NavigationStack zu entfernen (pop).

Einziges „Problem“ ist das Layout des Buttons, diesen wie einen Back Button erscheinen zu lassen, ermöglicht das Framwork three20. Folgender Codeausschnitt veranschaulicht die Vorgehensweise:

-(void) goBack
{
//Write your custommethods
NSlog(„hello custom Back Button“);
//Go back
[self.navigationControllerpopViewControllerAnimated:YES];
}

-(id) initWithName: (NSString*)name initwithBackround:(NSString*)backround {

// … Stuff

//Create the custom back button

TTButton *backButtonView = [TTButtonbuttonWithStyle:@“toolbarBackButton:“title:@“Back“];

[backButtonView addTarget:selfaction:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];

[backButtonView sizeToFit];

UIBarButtonItem *backButton = [[UIBarButtonItemalloc] initWithCustomView:backButtonView];

self.navigationItem.leftBarButtonItem = backButton;

[backButton release];

// Stuff

}

XCode Projekt umbennen

Wer mal ein XCode Projekt umbenennen wollte/musste war bis dato ziemlich aufgeschmissen. Das Umbenennen war ein einziger Krampf. Mit der neuen XCode Version hat Apple hier aber nachgelegt und ein Feature eingbaut, was man eigentlich in jeder Entwicklungsumgebung erwartet: Project Rename

Um ein XCode iPhone / iPad Projekt neu zu benennen einfach folgende Schritte durchlaufen:

1. Project -> Rename

2. Neuen Namen eingeben

3. Xcode überprüfen lassen, auf was sich die Änderung auswirkt

4. Snapshot erstellen lassen

5. fertig