Hej! Jag arbetar med gränssnittsdesign och iPhoneutveckling. Delägare i Appsters. Du når mig på 070-67 67 802.

Cocoa error 134100

Posted: July 26th, 2010 | Author: anders | Filed under: iphone | Tags: , , , | No Comments »

När jag skulle initera mina CoreData-lagringen med:

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]

Fick jag följande fel:

Error Operation could not be completed. (Cocoa error 134100.)

När du ändrat i dina CoreData-modeller så blir det alltid fel och det brukar normalt räcka med att köra en reset på iPhone Simulator, men den här gången räckte det inte. En timme senare inser jag att det här behöves köra en “Clean all targets” så fungerade allt igen. Litet litet tips…


Semi-localization

Posted: June 6th, 2010 | Author: anders | Filed under: iphone | Tags: , , , , , | No Comments »

För att byta mellan set av strängar kan du antingen göra en fullfjädrad localization. Ett alternativ att använda hantera strängar och språk manuellt i appen. Du kanske bara vill hantera olika sträng-set på ett överskådligt och uppdelat sätt.

Skapa en strings-fil:

Välj New File -> Strings File och döp filen till något du känner igen. Om det handlar om att separera språk så kan du exempelvis kalla den se.strings eller en.strings.

Sen fyller du på med nycklelvärden och strängar enligt:

/* se.strings */

/* urlar */

“baseurl” = “http://www.någonurlfördethärspråket.com”;

/* base menu */

“start” = “Hem”;

“settings” = “Inställningar”;

Notera semikolon i slutet av varje rad.

Hämta ut strängar från strings-filer:

Om du sedan vill hämta ut någon sträng – exempelvis “start”-strängen vilken ska översättas till “Hem” (i från ovan fil som heter se.strings) använder du bara:

NSLocalizedStringFromTable(@”start”, @”se”, nil);

Det första värdet är alltså namnet på “nyckeln”, det andra vilken fil, eller tabell, du vill läsa ifrån.


Hultsfredsappen släppt

Posted: June 2nd, 2010 | Author: anders | Filed under: iphone | Tags: , , | No Comments »


Push-notiser

Posted: May 17th, 2010 | Author: anders | Filed under: iphone | Tags: , , , , | No Comments »

Du kan skicka med vilka parametrar du vill i dina push-notiser.  Förutom badge-nummer, notisljud och notistext kan du skicka med extra-data som din app kan plocka upp i det NSDictionary-objekt som du tar emot via:

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

NSLog(@”Got values: %@”, [userInfo allValues]);

}

Eller  när programmet startar, triggad av en push-notification:

-(BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

application.applicationIconBadgeNumber = 0;

NSDictionary *userInfo = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

NSLog(@”Got values: %@”, [userInfo allValues]);

}

Exempelvis så skapar jag min JSON-array på följande vis med php:

$body['aps'] = array(’alert’ => $message);
if ($badge)
$body['aps']['badge'] = $badge;
if ($sound)
$body['aps']['sound'] = $sound;
$body['band'] = array();
$body['band']['id'] = “9″;

$body['aps'] = array(’alert’ => $message);

if ($badge)

$body['aps']['badge'] = $badge;

if ($sound)

$body['aps']['sound'] = $sound;

$body['extrainformation'] = array();

$body['extrainformation']['data1'] = “Extra sträng”;

json_encode($body);

Override på en Coredata-objekt setter

Posted: May 14th, 2010 | Author: anders | Filed under: iphone | Tags: , , , | No Comments »

Om du skapat ett Coredata-objekt med en uppsättning attribut och automat-genererat en klass kan det hända att du vill ändra en set-funktion. I mitt fall ville jag exempelvis nyligen uppdatera “tid för senaste updatering” samtidigt som jag favorit-markerade ett objekt.

I och med att alla Coredata-attribut är @dynamic kan du inte sätta värden som om det vore en vanlig @property utan du använder dig av Key Value Coding:

-(void) setFavourite:(NSNumber *) newFav {

[self willChangeValueForKey:@"favourite"];

[self setPrimitiveValue:newFav forKey:@"favourite"];

[self didChangeValueForKey:@"favourite"];

[self timestamp];

}

Det viktiga här är, för det första, att du använder willChangeValueForKey och didChangeValueForKey. Sen kan du använda setValue: forKey: vilket jag fått att fungera för NSString-attribut, men inte för NSNumber – så använd setPrimitiveValue: forKey: istället. Vad jag förstått är det generellt att föredra.

Då vi ändå är inne på key values så tänkte jag tipsa om key-paths. Letade rätt på en bloggpost som visar lite saker du kan använda det till – exempelvis smidigt söka igenom en NSArray eller NSDictionary.


iPhone och JSON decoding tips

Posted: May 14th, 2010 | Author: anders | Filed under: iphone | Tags: , , | No Comments »

Hade en app som fungerade perfekt med  SBJSON-encoder/decoder (som jag har sett och hört fler använda med goda resultat). Det har varit så för mig väldigt länge…

MEN… Helt plötsligt fick jag felmeddelanden utan att ha ändrat någon närliggande kod. Det klagades på att key-values inte var rätt separerade osv.

Det verkar som att den decodern inte klarar av för långa strängar och när json-flödet växte så gav den upp. Jag hittade istället TouchJSON vilken fungerade perfekt. Decodar på följande vis:

NSString *jsonString =[[NSString alloc] initWithString:collectedDataString];

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];

NSError *error = nil;

NSDictionary *res = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];

Touch JSON finns att ladda ner här.

Efter ytterligare läsning hittade jag även YAJL som i olika tester verkar vara snabbast av de tre.


XCode och resurser igen

Posted: April 26th, 2010 | Author: anders | Filed under: iphone | Tags: , , , , | No Comments »

Efter att ha rensat upp och strukturerat om min projektfil och tillhörande resurser slutade mitt projekt helt plötsligt att fungera. Det enda felmeddelandet jag fick upp var:

Failed to launch simulated application: Unknown error.

Efter att ha spenderat någon timme med att lista ut varför, kollat /var/log/system.log och googlat inser jag att många har haft samma problem, men inte alla hittar lösningen. Vanligtvis kan det räcka med att tömma cache:n i XCode eller reset:a iPhone Simulator, men i mitt fall räcker det inte.

Vad löste då problemet?

Jo, det var så enkelt som att vissa mappnamn inte är okej. Jag hade först döpt en resurs-mapp, som använder sig av folder-references, till Resources och därefter ExternalResources – båda vållade problem. Sen döpte jag mappen till samma namn som appen vilket också gav problem tills jag slutligen valde namnet Material. Och helt plötsligt fungerar projektet precis som det ska.

Konstigt att XCode inte kan ge ett korrekt felmeddelande när man försöker kompilera och testköra, men nu vet jag åtminstone att jag inte ska döpa externa resursmappar till något med resources eller något som innehåller app-namnet.


Rundade hörn på UIImageView

Posted: April 20th, 2010 | Author: anders | Filed under: iphone | Tags: , , , | No Comments »

Här kommer ett kort tips för att snabbt få rundade hörn på bilder i din app. Börja med att importera QuartsCore:

#import <QuartzCore/QuartzCore.h>

Sen räcker det med följande kod:

[imageView.layer setMasksToBounds:YES];

[imageView.layer setCornerRadius:5.0];


Problem med bildresurser i XCode

Posted: April 17th, 2010 | Author: anders | Filed under: iphone | Tags: , , , | No Comments »

xcode-add-script

iPhone-appar med många bilder som kanske uppdateras under utvecklingsarbetet kan ställa till det. Det finns två metoder i XCode för att hålla reda på resurser – antingen med mappreferenser eller enkelt grupperat – båda medför problem. Särskilt när du uppdaterar redan existerande bilder.

xcode-add-script-script

Efter att manuellt ha lagt till eller tagit bort filer hittade jag den här artikeln på majicjungle.com som innehåller en smidig lösning. Det går ut på att du lägger till ett skript som körs varje gång du kompilerar. Scriptet kör bara en “touch” på resurskatalogen med exempelvis bilder, vilket leder till att XCode ser att katalogen är uppdaterad och tar med den nya versionen i bundle:n.

För att lägga till scriptet så behöver du bara:

  1. Högerklicka på din target, välj “New Run Script Build Phase” enligt bilden ovan.
  2. Byt shell till tcsh och gör en touch på din resurskatalogs sökväg, baserat på var den ligger i förhållande till projektfilen (se bild). I mitt fall lägger jag dem oftast i samma katalog och skriver därför följande: touch -cm ${SRCROOT}/Resources
  3. Flytta ordningen så att scriptet körs först av allt i the build phase (se bild). xcode-add-script-order
  4. Klart!

För mig fungerade det här klockrent både vid skapande och uppdatering av bildresurser. Hur fungerar det för er? Ni kanske har något annat tips?


Error launching remote program: security policy error

Posted: April 16th, 2010 | Author: anders | Filed under: iphone | Tags: , , , | 1 Comment »

Känner ni igen felmeddelandet när ni ska testa din app på iPhone?

Error launching remote program: security policy error.

The program being debugged is not being run.

Du kan ha ställt in allting rätt för din profile, men det fungerar ändå inte.

Det kanske är fler som listat ut att det räcker med en enda “expired” provisioning profile för att det inte ska fungera. Det behöver inte ens vara profile:n för just den appen du ska köra – det fungerar ändå inte. Lösningen är dock enkel – det är bara att ta bort den profile:n som har gått ut så fungerar det igen.


10 bästa iPhone-spelen just nu

Posted: March 19th, 2010 | Author: anders | Filed under: iphone | Tags: , , , , , , , , , , , | 2 Comments »

När deadlines:en haglar är det svårt att ta sig tid till att blogga. Däremot har jag fått lite mer tid till iPhone-spelande då jag flyttat utanför tullarna igen, så jag här följer en lista på mina favoriter vad gäller spel just nu, istället för en ambitiös bloggpost.

1. Angry Birds

2. Orbital

3. MX Mayhem

4. X2Football

5. MoonDrop

6. Sway

7. NanoDrops

8. StarDefense

9. Project72

10. BirdStrike


Windows Phone – Microsoft kan ha en chans – MWC Barcelona

Posted: February 16th, 2010 | Author: anders | Filed under: Mobilt, iphone | No Comments »

Microsoft Windows Phone Demo

Jag har länge varit skeptiskt till Windows-mobilernas framtid och hade inte trott att det kunde vara något intressant som skulle dyka upp. Men när jag såg Microsofts presentation igår på MWC blev jag imponerad. Gränssnittet och animeringarna är underbara. Det gick att provköra på en stor touch screen och jag tycker att känslan verkligen är klockren. De verkar ha lyckats göra ett gränssnitt som är mer anpassat för mobilen än tidigare windows mobile-versioner. Väl genomtänkt.

microsoft-windows-phone-inboxIntegreringen med andra system är också bra. Visserligen har väl Zune aldrig varit så stort, men det är nu integrerat i systemet. Zune Market finns även kopplat till telefonen. Därutöver är även Xbox Live var kopplat till det samt vanliga Live och Facebook. Alla flöden som dyker upp är snyggt integrerade i gränssnittet som var väldigt minimalistiskt och snyggt.

De säger att de gjort om allt från grunden och att det prestandamässigt ska ligga mycket nära det simulatorn visade idag. Jag är väldigt skeptisk till det, men om prestandan kan vara bra så vill jag jag åtminstone ha en Windows Phone för att testa.

Är det en iPhone-dödare då? Det tror jag verkligen inte, men det ser lovande ut och Microsoft kommer nog kunna behålla en hel del Windows Mobile-användare. Det största problemet lär bli att få företag och utvecklare som vill utveckla för annat än iPhone och Android.

Läs mer på mobil.se.

microsoft-windows-phone-input

microsoft-windows-phone-test


Adobe Flash och iPhones på MWC Barcelona

Posted: February 16th, 2010 | Author: anders | Filed under: Flash, iphone | Tags: , , , , | No Comments »

Adobe-mwc

MWC har kickat igång och i och med Adobes satsning på mobilplattformar, senast iPhone var de självklart på plats. Med min bakgrund som flashutvecklare är Adobe:s iPhone-satsning självklart intressant att hålla koll på. En av de som arbetar med iPhone och mobil-exporten i största allämnhet var där och jag passade på att fråga ut honom.

Tydligen har Adobe c:a 400 flashutvecklare som just nu  testar deras iPhone-inriktning. Och till skillnad från vad man kan se på Adobe:s hemsida menade han bland annat att det just nu finns 40 st appar på AppStore som är gjorda via Flash, fast de har inte rätt att publicera namnen på dessa på adobe.com. Det är intressant! Jag skulle gärna veta vilka fler appar som gjorts och se om de är bättre än de exempel som finns på adobe.com.

Adobe iPhone Export

Jag frågade även om prestandan och tog upp att jag inte var helt nöjd med prestandan på de spel jag sett exporterade till iPhone och provat på en 3G. Han höll med men tillade att samma spel flyter bättre på exempelvis en Android-telefon, samtidigt han även sa att de jobbar vidare med optimering samt koppling till iPhone:s GPU. iPhone-exportmöjligheter kommer finnas i Flash CS5, men han sa att det kommer vara beta-stadie även på det och han ville inte ge någon tidsram för när systemet kan anses vara komplett. Adobe arbetar även på ett white paper för optimering rent generellt som ska underlätta för utvecklare att skriva hårdare optimerade program och spel.

Har inte sett det här själv förut men såhär ser export-rutan ut. Du behöver alltså bara fylla i dina grunduppgifter från iPhone Developer Programme, lägga in certifikatet och sen exporteras en färdig app. Att kompilera direkt till telefonen kommer inte fungera, men allting förbereds så att det bara är att dra och släppa till iTunes för att installera på din iPhone.

Passade även på att kolla in källkoden på ett av programmen som använde multi-touch och jag måste spontant säga att det såg ganska enkelt ut att programmera.

När jag frågade vad han trodde om Flash för iPhone sa han bland annat att han förstår att Apple inte vill ta in Flash av strategiska skäl.

Adobe demonstration

Adobe iPhone Export