iPhone-udvikling #2: De første skridt
Trods mere end 15.000 programmer i App Store halter det fortsat med de danske af slagsen. Der findes selvfølgelig programmer lavet til danske forhold, men det kunne være meget bedre.
I den kommende tid vil iPhoneguide derfor sætte mere fokus på udviklingen af programmer til iPhonen, med det formål at få flere folk i gang med at udvikle danske programmer. Helt konkret sker det med en artikelserie der viser hvordan man kommer i gang med at udvikle. Artikelserien løber i foreløbig seks uger.
I sidste uge blev vi registeret som udvikler og fik hente udviklingsværktøjer og SDK. Nu skal vi igang med at lave vores første simple app, designe den grafiske grænseflade, skrive kode og afvikle vores program på iPhone Simulatoren.
Men først lidt teknik. Artikelserien hedder jo “iPhone udvikling”, så vi kommer ikke udenom programmeringen. Det at programmere, at kode, er ret omfattende, og du vil IKKE lære at programmere i denne artikel serie. Men selvom du aldrig har programmeret før, kan du sagtens følge med. Det kan godt gå hen og blive en hård omgang, men husk der at hjælp at hente ved at lægge en kommentar.
Objective-C og Cocoa
Når man skal programmere til iPhone eller mac benytter man som oftest et programmeringssprog der hedder Objective-C eller Obj-C. Det er et objekt-orienteret programmeringssprog, som Apple tog til sig i slutningen af 1980′erne. Det fleste dele af Mac OSX og iPhone OS er programmereret i Objective-C. Selve sproget er i virkeligheden ret simpelt, men kan sagtens volde problemer når man forsøger sig med det.
I et objekt orienteret sprog, snakker man om objekter og klasser. Disse begreber vil ikke blive diskuteret nærmere. Man skal blot vide at en “klasse” indeholder den kode vi skriver. Koden for en klasse ligger dels i en header fil (*.h) og en implementationsfil (*.m).
Når man programmerer har man som regel nogle eksisterende “klodser” man kan gøre brug af. Det vil sige nogle moduler, biblioteker, frameworks, kode mv. som man kan benytte i sin egen applikation. Til iPhone hedder frameworket Cocoa Touch og indeholder alt fra GUI elementer, GPS, ADT, Strenge osv.
Alt i alt giver Objective-C og Cocoa et rigtig godt fundament til ens applikationer.
På næste side går vi i gang med det første program.
Pimp din iPhone med lysende kabel
Analytiker: iPhone 5 kommer til juni
Jagten på kvinden med dragetatoveringen
Apple overhaler LG og er nu verdens tredjestørste
Vinderen af januar måneds præmie er fundet
Avid Studio vil konkurrere med iMovie
Billeder viser iPad 3 med quad core processor og LTE-understøttelse
Puslespil i 3D
Forunderlige troldefortællinger
Opdatering til Final Cut Pro X
Apple ansætter John Browett som detailchef
Munster: Apple er i dialog med producenter af TV-komponenter
Spar 300 kroner på en Apple TV i Fona
Problemer med YouTubes-streaming
Patent: Apple TV skal kunne optage live TV
Patrick
Yay… Glæder mig alleredetl næste uge
30. januar 2009 @ 08:25
Mikkel
puha, det er en lang artikel. Håber ikke at I har planer i weekenden.
Husk at smide en kommentar hvis I løber ind i nogle problemer…
30. januar 2009 @ 08:37
Martin
Jeg har nu gennemgået det med positivt resultat, det tog ca. en halv time. Men jeg har læst den igennem 3-4 gange inden jeg gjorde det (i forbindelse med at jeg redigerede artiklen) og leget lidt med xcode inden da, så det kan godt være det tager lidt længere tid.
Nu vil jeg så “lege” lidt og se hvad der sker “eller ikke sker”.
30. januar 2009 @ 09:14
Martin
Jeg har nu tilføjet en ekstra “knap” der åbner politikkens hjemmeside:
Jeg har lavet en ny metode, som jeg har kaldt “clicked2″ efter samme mønster som “clicked” blot med politiken.dk som URL. Nu vil jeg forsøge at finde ud af hvordan de forskellige events kan åbne URLen dvs. ændre “Touch up inside” til nogle af de andre ting.
Jeg vil også opfordre andre til at komme med deres erfaringen, og så de negative. Vi kan jo være heldige at Mikkel forklarer os hvorfor det ikke virker, eller hvorfor det er en dårlig ide det vi gør.
30. januar 2009 @ 09:27
JFlindt
Super lækker artikel serie…. Tog ikke lang tid at løbe den igennem og få den første app op og spille.
Glæder mig til næste artikel i serien
30. januar 2009 @ 11:46
Martin
@Mikkel
Er det rigtigt forstået, at “clicked” og “clicked2″ som ovenfor i kommentaren udelukkende er et navn og derfor i princippet kunne være hvad som helst (sigende, så man kan huske det) eller er der noget jeg har misforstået?
30. januar 2009 @ 14:12
emil
Så mangler jeg bare en mac ):
30. januar 2009 @ 15:01
Mikkel
Martin, de kan hedde hvad som helst…
Glad for at I kan få det til at virke…
30. januar 2009 @ 16:04
LaWiPi
Hey!
Hvor er “næste side” når man læser den iPhone-formaterede udgave af siden?
30. januar 2009 @ 19:39
Martin
@LaWiPi
Så er det på plads. Tak for at gøre mig opmærksom på problemet.
30. januar 2009 @ 20:55
LaWiPi
Det var da så lidt! kvaliteten af artiklen steg betydeligt, da de øvrige sider kom med..
@Mikkel
Det er sgu et godt initiativ, og vel udført!
30. januar 2009 @ 21:18
EmilC
Rigtig god artikel.
Tak til Mikkel fordi du gider, at dele din erfaring med os andre
30. januar 2009 @ 22:55
NP
Tak for en rigtig god artikel.
Jeg har små problemer, og kan ikke finde ud af, hvad jeg gør forkert.
Jeg har indtastet koden i .h og .m, og derefter når jeg højre klikker på knappen, kan jeg ikke få “clicked” frem, jeg kan kun vælge “Events” og “Referencing Outlets” i den mørke box.
10. februar 2009 @ 15:15
Emojet
Har et lige et spørgsmål:
Vil det være muligt at ændre en værdi i en boks ved at bruge metoden her? Altså clicked-metoden… Sådan så der står 9 når man har trykket en gang, på den knap man har lavet, hvorefter værdien fx bliver ændret til 12 når man trykker anden gang på den. Og hvordan gør man? Evt. kunne det indgå i næste artikel-serie?
//Emil
12. februar 2009 @ 21:10
Martin
@emojet
Det kan man godt gøre – det er præcis det jeg har gjort i mit program, Det Periodiske System. Jeg har dog brugt en lidt anden metode:
I IB laver jeg to knapper og en tekst-label.
I .h-filen har jeg defineret dette – dvs. jeg bruger “sender” i stedet for “target”:
@interface iPhone_dev_1AppDelegate : NSObject {
IBOutlet UILabel *lblTal;
}
@property(nonatomic,retain) IBOutlet UILabel *lblTal;
- (IBAction) knap1:(id) sender;
- (IBAction) knap2:(id) sender;
I .m-filen dette:
@synthesize lblTal;
- (IBAction) knap1:(id) sender {
lblTal.text = @”9″;
}
- (IBAction) knap2:(id) sender {
lblTal.text = @”12″;
}
I IB skal tingene så bare forbindes:
- Tryk på den ene knap og vælg derefter “connection inspector”. Fra “touch down” laver du en forbindelse til “files owner” og vælger knap1
- Fra den anden knap gør du det samme, men vælger knap2
- Fra Files owner laver du en forbindelse til din label og vælger lblTal
Det burde være det hele. Når du trykker på en af de to knapper sender de deres værdi til label. Du kan indføre flere knapper efter behov og også flere labels efter behov.
Dette bare ideen, der er ikke sikkert du kan bruge koden direkte.
12. februar 2009 @ 22:07
Emojet
Mange tak for hurtigt svar Martin
– Vil straks gå ind og prøve metoden… Men kan man også med en enkelt knap ændre værdien i labellen op til flere gange? Kun ved hjælp af en knap. D.v.s at labellen viser 1 første gang man trykker på knappen, hvorefter tallet i labellen bliver ændret til fx 2 næste gang man trykker på den samme knap?
Mvh Emil
13. februar 2009 @ 07:36
Martin
Givetvis, jeg ved bare ikke hvordan og har ikke selv haft brug for det endnu.
13. februar 2009 @ 09:14
mikkel
@NP, og du har gemt .h filen??
Har du skrevet IBOutlet i din .h fil de rigtige steder??
Hvids det ikke hjælper kan du sende mig din kode på mikkel@increment.dk, så kigger jeg på det??
13. februar 2009 @ 10:33
iSteff
Når jeg går ind i interfacebuilder så får jeg dette frem : http://bayimg.com/image/manomaabj.jpg så når jeg prøver den af i simulatren med den indsatte knap så er hele skærmen en stor knap med afrundede hjørner i toppen :/
16. februar 2009 @ 20:33
Anders
Hej, rigtig dejligt at se en artikel serie som denne – jeg har et problem med at få denne application til at lykkedes, og vil høre om nogle har haft samme problem, eller kunne give mig en løsning alligevel
, anyways. Jeg har fulgt dine instrukser helt præcist (efter min overbevisning), mht. kode og det hele. Dog får jeg følgende fejl mht. mit delegate.m, når jeg forsøger at compile:
error: “clicked” undeclared (first use in this function)
error: “url” undeclared (first use in this function)
Et andet spørgsmål jeg har, på mere generel plan er, ved andre blogs har jeg programmeret nogle begynder applications i “ViewController.m” og “ViewController.h”, hvorimod der i denne serie bliver skrevet kode i delegate.m og delegate.h. Hvad er forskellen?
Tak
Mvh. Anders
16. maj 2009 @ 18:04
Anders
Nvm – har fundet en løsning på det : )
18. maj 2009 @ 11:16
mikkel
#21 godt du fik det løst
ang #20 hvor man lægger sin kode handler lidt om stil og design. Det er svært at pege på nogen rigtig metode, men ofte let at udpege en forkert.
18. maj 2009 @ 12:00
Kuglepen
hmm, er der nogen som kan give et lidt bedre forklaring hvor NSLog(@”Hello!”); skal placeres ? for der sker intet når jeg trykker build and go
efter som jeg har forstået så skal den smides ind hvor // Override point for customization after application launch
men er sikker på det er mig som har misforstået et eller andet..
håber i kan hjælpe mig på rette vej..
mvh Kuglepen
15. juni 2009 @ 20:39
Martin
@Kuglepen
Et eller andet må der ske. Får du en fejlmeldning eller hvad sker der?
15. juni 2009 @ 21:06
Kuglepen
der sker intet, trykker build and go og så er det det
15. juni 2009 @ 21:19
Kuglepen
hey, så virker det, havde bare ikke fået slettet disse 2 // ;S
15. juni 2009 @ 21:26
Ulrik
Jeg får en error når jeg trykker “Build and Run”
der står: “Code Sign error: The Identity ‘iPhone Developer’ doesn’t match any valid certificate/private key pair in the default keychain”
Ved ikke rigtig hvad jeg skal gøre
7. oktober 2009 @ 01:19
Surferen
@Ulrik
Jeg får samme fejl. Og det er lige meget om jeg starter et helt nyt projekt og arbejder i, samme fejl opstår.
Fandt du ud af hvad man kunne gøre?
Jeg har på fornemmelse at det er efter jeg har tilsluttede min Iphone til min mac, at den er begyndt med det.
2. marts 2010 @ 10:41
Martin
@Ulrik og surferen
I kan kun teste programmet på selve iPhonen, hvis i har et gyldigt udvikkler-certifikat og det hele er sat om som det skal. Uden det kan i kun teste i simulatoren, der ikke kræver signering af kode.
2. marts 2010 @ 10:44
Surferen
Jeg fandt ud af det.
Det er fordi man kan vælge imellem simulator eller device, og hvis man ikke er godkendt udvikler, kan man ikke kører den på sin telefon.
udemærket. Så kan jeg heldigvis komme videre
2. marts 2010 @ 10:52
Surferen
@Martin
Tak for hjælpen. Det er nu sjovt at prøve at udvikle til Iphone og mac.
Jeg har selv udviklet rigtig meget til Windows C#, og et rigtig fedt sprog med masser af muligheder. Så glæder mig til at arbejde med obj-c. og dejligt at der er en masse guides herinde til at hjælpe en:-D
2. marts 2010 @ 10:55
Carsten
Er der nogle som har en løsning på iSteff´s spørgsmål?
jeg har nemlig samme problem
3. oktober 2010 @ 00:02
Carsten
Så virker det
Jeg fik valgt View-based App i stedet for Window-based App…
3. oktober 2010 @ 11:21
eske
rigtig dejligt at se en artikel serie som denne –
jeg har et problem med at få denne application til at lykkedes,
og vil høre om nogle har haft samme problem,
eller kunne give mig en løsning alligevel ,
anyways. Jeg har fulgt dine instrukser helt
præcist (efter min overbevisning), mht. kode og det hele.
Dog får jeg følgende fejl
error: “clicked” undeclared (first use in this function)
error: “expected befor token
24. januar 2011 @ 14:00
Martin
@eske
Tjek lige din kode igen. Der mangler måske et kolon efter clicked et sted.
24. januar 2011 @ 14:31
Jacob
Nogle der har lyst og evnerne til at udvikle en demo App til mig. Vi går og roder med lidt ideer, men skal bruge nogle der kan programmere.
8. februar 2011 @ 12:47
Niklafritz
hej Martin fed guide!!!
Hvordan får jeg applikationen ned på min iPhone? Og hvordan laver jeg en label så den ser godt ud når den ligger på min iPhone?
10. maj 2011 @ 12:49