{"id":239,"date":"2009-03-03T12:15:25","date_gmt":"2009-03-03T11:15:25","guid":{"rendered":"http:\/\/www.hinnerup.net\/?p=239"},"modified":"2009-03-06T21:49:55","modified_gmt":"2009-03-06T20:49:55","slug":"introduktion-til-iphone-udvikling","status":"publish","type":"post","link":"https:\/\/www.hinnerup.net\/en\/permanent\/2009\/03\/03\/introduktion-til-iphone-udvikling\/","title":{"rendered":"Introduktion til iPhone udvikling"},"content":{"rendered":"<p>IPhonen er et sp\u00e6ndende stykke leget\u00f8j, komplet med en mini\u00a0version af Mac OS, internet adgang, multitouch input, underst\u00f8ttelse\u00a0af basale openGL kald og et accelerometer. Denne forholdsvis nye gadget skal der\u00a0naturligvis leges med. Vi vil gerne her vise hvordan man selv f\u00e5r hul igennem til en &#8220;hello world&#8221; applikation p\u00e5 iPhone.<\/p>\n<h3>Ops\u00e6tning af milj\u00f8<\/h3>\n<p>For at kunne udvikle iPhone applikationer fra en PC kr\u00e6ves det at\u00a0man f\u00f8rst f\u00e5r sat et ordentligt udviklingsmilj\u00f8 op. Til dette har Apple stillet iPhone Simulator til\u00a0r\u00e5dighed. Simulatoren giver udviklere en virtuel iPhone til r\u00e5dighed\u00a0under OS X, s\u00e5 de derfor ikke beh\u00f8ver uploade deres applikation til\u00a0iPhonen f\u00f8r hver kodetilpasning og test.<\/p>\n<div style=\"padding-left:1em;float:right;\"><a href=\"\/wp-content\/uploads\/2009\/03\/first_iphone1.png\"><img decoding=\"async\" class=\"size-medium wp-image-251 alignright\" src=\"\/wp-content\/uploads\/2009\/03\/first_iphone1.png\" style=\"width:250px;border:none\" alt=\"\" \/><\/a><\/div>\n<p>Ops\u00e6tningen af milj\u00f8et er som f\u00f8lger:<\/p>\n<ol>\n<li>Find en Mac med OS X 10.5.5 eller nyere (kan fx. installeres som en VM under windows). Dette er i skrivende\u00a0stund kravet for at kunne k\u00f8rer den nyeste iPhone SDK<\/li>\n<li>F\u00f8rst installeres Xcode Tools. Dette er udviklingsmilj\u00f8et (svarerende til Microsoft Visual Studio til Windows). Xcode kan findes p\u00e5\u00a0Install DVD&#8217;en, der f\u00f8lger med OS X.<\/li>\n<li>Bliv registreret som iPhone developer\u00a0under <a href=\"http:\/\/developer.apple.com\/iphone\/sdk1\/\">iPhone Dev\u00a0Center<\/a> og download iPhone SDK.<\/li>\n<li>Installer iPhone SDK (men f\u00f8rst efter Xcode installationen).<\/li>\n<li>Tillykke. Du har nu en virtuel iPhone p\u00e5 din computer. K\u00f8r\u00a0programmet iPhone simulator og en iPhone vil dukke op p\u00e5 din\u00a0sk\u00e6rm. Leg lidt med den inden vi g\u00e5r videre \ud83d\ude42<\/li>\n<\/ol>\n<h3>F\u00f8rste program<\/h3>\n<p>S\u00e5 g\u00e5r det l\u00f8s, &#8220;Hello World&#8221; applikationen skal implementeres. Applikationen vil blot indeholde en label med tekst og en knap til at \u00e6ndre\u00a0denne tekst.<\/p>\n<p>F\u00f8rst startes et nyt projekt. Dette g\u00f8res under File \u2192 New\u00a0Project. Her v\u00e6lges iPhone OS \u2192 Application \u2192 View-Based\u00a0Application, da vi kun har brug for \u00e9t view og ingen af de ekstra\u00a0features de andre muligheder giver os. Kald projektet &#8220;Hello\u00a0World&#8221; og tryk OK.<\/p>\n<p>Xcode laver nu selv et grundprojekt med et view tilknyttet, som\u00a0nu skal udvides med den \u00f8nskede funktionalitet.<\/p>\n<p>N\u00e5r Xcode har generet projektet kommer &#8220;Project&#8221; vinduet frem (skulle det blive skjult igen kan der altid trykkes cmd + 0 for at f\u00e5 det vist p\u00e5 ny). Herfra vil vi som det f\u00f8rst \u00e6ndre\u00a0lidt p\u00e5 vores applikationsbrugerflade. I &#8220;Project&#8221; vinduet g\u00e5 da ind\u00a0under HelloWorld \u2192 Resources og dobbeltklik\u00a0HelloWorldViewController.xib. Dette starter Interface Builder\u00a0Applikationen. Denne viser i vinduet View et billede af applikationsbrugerfladen, der pt blot er en uinteressant gr\u00e5 baggrund.<\/p>\n<p>Hvis vinduet &#8220;Library&#8221; ikke allerede er \u00e5bent kan dette g\u00f8res fra Tools\u00a0\u2192 Library. I &#8220;Library&#8221; ses en masse brugergr\u00e6nseflade elementer, som\u00a0kan tr\u00e6kkes over p\u00e5 i Interface builderen. I denne gennemgang skal vi som n\u00e6vnt bruge\u00a0en label og en knap, s\u00e5 tr\u00e6k disse to over i viewet.<\/p>\n<div style=\"center\"><a href=\"\/wp-content\/uploads\/2009\/03\/interface_builder1.png\"><img decoding=\"async\" class=\"size-full wp-image-241 aligncenter\" src=\"\/wp-content\/uploads\/2009\/03\/interface_builder1.png\" alt=\"Interface Builder\" style=\"width:540px;border:none\" \/><\/a><\/div>\n<p>Dobbeltklik p\u00e5 lablens tekst og ret denne til &amp;qout;Hello\u00a0World!&amp;qout;<\/p>\n<p>Hvis vi bare ville have vores applikation til at vise en label med\u00a0&#8220;Hello World&#8221;, s\u00e5 kunne vi v\u00e6re f\u00e6rdig nu. For at f\u00e5 noget kode ind,\u00a0udvider vi den til ved klik p\u00e5 knappen at skrive &#8220;Hello Universe!&#8221;.<\/p>\n<p>I HelloWorldViewController.h, fundet under &#8220;Classes&#8221; i projektmappen,\u00a0udvides interface med f\u00f8lgende:<\/p>\n<div style=\"center\"><a href=\"\/wp-content\/uploads\/2009\/03\/view_h.png\"><img loading=\"lazy\" decoding=\"async\" width=\"345\" height=\"135\" class=\"size-medium wp-image-252\" src=\"\/wp-content\/uploads\/2009\/03\/view_h.png\" alt=\"HelloWorldViewController.h\"  style=\"border:none\" srcset=\"https:\/\/www.hinnerup.net\/wp-content\/uploads\/2009\/03\/view_h.png 345w, https:\/\/www.hinnerup.net\/wp-content\/uploads\/2009\/03\/view_h-300x117.png 300w\" sizes=\"auto, (max-width: 345px) 100vw, 345px\" \/><\/a><\/div>\n<p>HelloWorldViewController.h er header filen for vores\u00a0ViewController. Den f\u00f8rste linje vi tilf\u00f8jer definerer en variabel,\u00a0<tt>lblHello<\/tt>, af typen UILabel og som er et outlet til en IO enhed. Den\u00a0anden linje vi tilf\u00f8jer definerer metoden, updateLabel, der skal\u00a0kaldes n\u00e5r vores knap trykkes ned.<\/p>\n<p>Nu skal vi s\u00e5 have forbundet vores erkl\u00e6rede variabel og metode med\u00a0elementerne i vores interface. Derfor \u00e5bner vi igen Interface\u00a0Builderen, s\u00e5 dobbeltklik p\u00e5 HelloWorldViewController.xib.<\/p>\n<p>Klik p\u00e5 lablen og \u00e5ben &#8220;Connections Inspectoren&#8221;, fra &#8220;Tools&#8221; menuen. Ud for &#8220;New Reference Outlet&#8221; ses en cirkel. Klik\u00a0p\u00e5 denne cirkel, hold nede og tr\u00e6k den bl\u00e5 streg, der kommer frem,\u00a0over til &#8220;File&#8217;s Owner&#8221; ikonet som illustreret her:<\/p>\n<div style=\"center\"><a href=\"\/wp-content\/uploads\/2009\/03\/label2var1.png\"><img decoding=\"async\" class=\"size-medium wp-image-243 aligncenter\" src=\"\/wp-content\/uploads\/2009\/03\/label2var1.png\" alt=\"UI Element dragged to variabel\" style=\"width:540px;border:none\" \/><\/a><\/div>\n<p>I den fremkommende menu, knyt da lablen til lblHello variablen.<\/p>\n<p>P\u00e5 samme m\u00e5de knytter vi knappen til projektet. Klik p\u00e5 knappen og\u00a0g\u00e5 ind i &#8220;Connections Inspector&#8221;. Da vi vil have noget til at ske n\u00e5r\u00a0knappen trykkes ned, klikke vi p\u00e5 cirklen ud for &#8220;Touch Up Inside&#8221;\u00a0eventet og tr\u00e6kker pilen over p\u00e5 &#8220;File&#8217;s Owner&#8221;, hvor vi knytter den til\u00a0updateLabel metoden.<\/p>\n<p>Nu skal koden skrives, som \u00e6ndre lablen n\u00e5r knappen trykkes ned. \u00c5ben\u00a0HelloWorldViewController.m fundet under &#8220;Classes&#8221; mappen. Der vil\u00a0muligvis v\u00e6re en masse udkommenterede metoder heri, indsat af Xcode da\u00a0filen blev genereret. Disse er bare metoder nedarvet fra\u00a0UIViewControlleren og kan overskrives hvis man har behov for det. Vi\u00a0er godt tilfredse med dem som de er, s\u00e5 vi ignorerer dem og udvider\u00a0filen med f\u00f8lgende kode:<\/p>\n<div style=\"center\"><a href=\"\/wp-content\/uploads\/2009\/03\/view_m.png\"><img loading=\"lazy\" decoding=\"async\" width=\"247\" height=\"105\" class=\"size-medium wp-image-253\" style=\"border:none;\" src=\"\/wp-content\/uploads\/2009\/03\/view_m.png\" alt=\"HelloWorldViewController.m\" \/><\/a><\/div>\n<p>Dermed tildeles strengen &#8220;Hello Universe&#8221; til teksten i\u00a0vores label.<\/p>\n<p>Applikationen kan nu kompileres og k\u00f8res i iPhone simulatoren.<\/p>\n<p>V\u00e6lg &#8220;Simulator&#8221; som \u00f8nsket kompileringsresultat (target) og tryk &#8220;Build and Go&#8221; ikonet i toppen af\u00a0&#8220;Project&#8221; vinduet for at starte applikationen.<\/p>\n<div style=\"center;\"><a href=\"\/wp-content\/uploads\/2009\/03\/sim.png\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"560\" class=\"size-medium wp-image-254 aligncenter\" src=\"\/wp-content\/uploads\/2009\/03\/sim.png\" alt=\"Simulator target\" style=\"border:none;width:540px\" srcset=\"https:\/\/www.hinnerup.net\/wp-content\/uploads\/2009\/03\/sim.png 788w, https:\/\/www.hinnerup.net\/wp-content\/uploads\/2009\/03\/sim-300x213.png 300w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/a><\/div>\n<p>IPhone simulatoren startes automatisk op af Xcode og viser det forventede resultat:<\/p>\n<div style=\"text-align:center;\"><a href=\"\/wp-content\/uploads\/2009\/03\/hello_world1.png\"><img decoding=\"async\" class=\"size-medium wp-image-255 aligncenter\" src=\"\/wp-content\/uploads\/2009\/03\/hello_world1.png\" alt=\"Hello World\" style=\"border:none;width:300px\" \/><\/a><\/div>\n<h3>Resourcer<\/h3>\n<p><a href=\"http:\/\/developer.apple.com\/iphone\/\">iPhone Dev Center<\/a> &#8211;\u00a0Apple&#8217;s iPhone developer center.<\/p>\n<p><a href=\"http:\/\/icodeblog.com\/\">iCodeBlog<\/a> &#8211; Blog omkring\u00a0iPhone development med gode introduktions toturials.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>IPhonen er et sp\u00e6ndende stykke leget\u00f8j, komplet med en mini\u00a0version af Mac OS, internet adgang, multitouch input, underst\u00f8ttelse\u00a0af basale openGL kald og et accelerometer. Denne forholdsvis nye gadget skal der\u00a0naturligvis leges med. Vi vil gerne her vise hvordan man selv f\u00e5r hul igennem til en &#8220;hello world&#8221; applikation p\u00e5 iPhone. Ops\u00e6tning af milj\u00f8 For at [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,4],"tags":[23],"class_list":["post-239","post","type-post","status-publish","format-standard","hentry","category-iphone-programming","category-programming","tag-iphone"],"_links":{"self":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts\/239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/comments?post=239"}],"version-history":[{"count":39,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts\/239\/revisions"}],"predecessor-version":[{"id":296,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/posts\/239\/revisions\/296"}],"wp:attachment":[{"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/media?parent=239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/categories?post=239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hinnerup.net\/en\/wp-json\/wp\/v2\/tags?post=239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}