ラベル Swift (iPhoneアプリ) の投稿を表示しています。 すべての投稿を表示
ラベル Swift (iPhoneアプリ) の投稿を表示しています。 すべての投稿を表示

2015年4月18日土曜日

FabricでTwitter with Swift(iPhone)

Fabricを使って、Twitterクライアントを作る方法(Swift)



いろいろフレームワークがしてくれて楽なのですが、まだまだ未完成のようで、あまり機能がありません・・・
また、公式ドキュメントも一部Objective-Cしかなく、頼りないです。

ただし、セルの高さの計算・アイコン画像の非同期受信などはすべて自動で行ってくれます。ログインボタンもとても簡単に実装することができます。


Qiitaー[iOS]FabricでTwitterクライアントを作った
このページがとてもわかり易いです。Fabricの適用方法などはこちらを参照してください。

このページのTwitterAPI.swiftを拡張して、サーチ・投稿・IDによるツイートの取得の関数を追加しました。

GitHub上に公開しています。
https://github.com/ha1fha1f/Lit_final/blob/master/TwitterAPI.swift

以下、上のAPIを用いたデータの保持・取得を行うクラスの例です。(2015/4/17現在)

import Foundation
import TwitterKit

class TweetDataModel :NSObject{
    
    var tweets:[TWTRTweet]
    
    // initialize
    override init() {
        self.tweets = []
    }
    
    func fetchTimeline(maxid:String?){
        TwitterAPI.getHomeTimeline({
            twttrs in
            
            println("fetch")
            
            if self.tweets.count == 0 {
                self.tweets = twttrs
            }else{
                let tmptweets:[TWTRTweet]
                
                if twttrs[0].tweetID > self.tweets.last?.tweetID {//新しいツイートがある
                    tmptweets = reverse(twttrs)
                }else{
                    //if twttrs.last?.tweetID < self.tweets[0].tweetID{//古いツイートがある
                    tmptweets=twttrs
                }
            
                for tweetCell in tmptweets {
                    if tweetCell.tweetID > self.tweets[0].tweetID {//新ツイートを上に追加
                        self.tweets.insert(tweetCell,atIndex: 0)
                    }else if tweetCell.tweetID < self.tweets.last?.tweetID {//古いツイートを下に追加
                        self.tweets.append(tweetCell)
                    }
                }
            }
            println("finish")

            //notificationを送る
            NSNotificationCenter.defaultCenter().postNotificationName("tweetLoaded", object: nil)
            
            },
            maxid: maxid,
            count: "40",
            error: {error in println(error.localizedDescription)})
    }
}
ご参考までに。
これは.Darkのテーマでの表示です!

セルのテーマカラーは二種類用意されています。.Darkと.Lightです。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! OriginalTweetTableViewCell
        
        println("\(indexPath.row)")
        
        if tweetData.tweets.count > indexPath.row {
            let tweet = tweetData.tweets[indexPath.row]
            cell.tag = indexPath.row
            cell.configureWithTweet(tweet)
            cell.tweetView.theme = .Dark
            cell.delegate = self
        }
        
        return cell
    }
のように、セルを返すときに、tweetView.themeを設定すればよいです。

僕の場合はTWTRTweetCellを継承したオリジナルのクラスを作ったのでやや異なりますが、設定方法などはだいたい同じです。
(https://github.com/ha1fha1f/Lit_final/blob/master/Litfinal/OriginalCell.swift)

雑になってしまいましたが、終わります

2015年4月17日金曜日

Swift(iPhone)での形態素解析〜NSLinguisticTagger〜

iPhoneにmecabのframeworkが搭載されているのは見えるが、公式のリファレンスがなく、使用することができない。

しかし、それ以外の(?)形態素解析を用いることができる。
iOS 5.1から搭載されているが、紹介記事が少ないので。

        var testString="iPhoneでも形態素解析を手軽に、だれでも行うことができます。ただし、日本語の場合、機能制限が多いです"
        let tagschemes = NSLinguisticTagger.availableTagSchemesForLanguage("ja")//取得するだけ
        let tagger = NSLinguisticTagger(tagSchemes: tagschemes,options: 0)//インスタンス作成
        let options: NSLinguisticTaggerOptions = .OmitWhitespace | .OmitPunctuation | .JoinNames
        tagger.string=testString//文字列をセット
        tagger.enumerateTagsInRange(NSMakeRange(0, (testString as NSString).length), scheme: NSLinguisticTagSchemeTokenType, options: options) {
            (tag, tokenRange, sentenceRange, _) in
            let token = (self.testString as NSString).substringWithRange(tokenRange)
            println("\(token): \(tag)")
        }
たったこれだけ。

NSLinguisticTagger.availableTagSchemesForLanguage で取得できるのは、使える機能のリストです。
日本語("ja")では[TokenType, Language, Script]
英語("en")では[TokenType,Language,Script,Lemma,LexicalClass,NameType,NameTypeOrLexicalClass]
が返ってきます。

一般的な形態素解析(品詞まで分解)はNSLinguisticTagSchemeLexicalClassです

日本語に対してできる最大限、NSLinguisticTagSchemeTokenTypeを行うと、文をトークンに分割したものを出力してくれます。"tag"は基本的に"Word"になっています。

何かに使えればいいな。

ただし、認識精度は非常に低いです。。。
token= 今日: Word
token= : Word
token= : Word
token= : Word
token= 天気: Word
token= です: Word
token= : Word
token= なんで: Word
token= : Word
token= : Word
token= : Word
token= 同じ: Word
token= 単語: Word
token= : Word
token= : Word
token= : Word
token= 認識: Word
token= : Word
token= : Word
token= ない: Word
token= : Word
token= じゃ: Word

mecabなら
今日はいい天気ですね
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
なんで「いい」が同じ単語として認識されないんじゃ
なんで 副詞,一般,*,*,*,*,なんで,ナンデ,ナンデ
記号,括弧開,*,*,*,*,「,「,「
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
記号,括弧閉,*,*,*,*,」,」,」
助詞,格助詞,一般,*,*,*,が,ガ,ガ
同じ 連体詞,*,*,*,*,*,同じ,オナジ,オナジ
単語 名詞,一般,*,*,*,*,単語,タンゴ,タンゴ
として 助詞,格助詞,連語,*,*,*,として,トシテ,トシテ
認識 名詞,サ変接続,*,*,*,*,認識,ニンシキ,ニンシキ
動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
動詞,接尾,*,*,一段,未然形,れる,レ,レ
ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
名詞,非自立,一般,*,*,*,ん,ン,ン
じゃ 助詞,副助詞,*,*,*,*,じゃ,ジャ,ジャ

EOS




参考URL:
http://nshipster.com/nslinguistictagger/
http://d.hatena.ne.jp/shu223/20130318/1363566717

2015年3月4日水曜日

初めてMacを購入したDeveloperがすること

0. はじめに

プログラミングの言語は色々あります。Macは、購入した時点でPHPやRuby, Perl, Pythonのコマンドは入っており、開発可能です。以下、C, C++, Objective-C, Python, PHPの開発について、環境の構築について書きます。
ブラウザからダウンロードしても使えるのですが、あとあとバージョン管理とかでちょっと困ると思うので。
5までは全員すべきことで、それ以降はOptionalです。

1. Xcodeのインストール

まずはXcodeをインストールしましょう。Appleで開発者登録をすると、ダウンロードできます。iPhone/Mac開発には必須のツールです。また、他の言語の開発にも使える統合開発環境(IDE)です。
Xcode

2. Command Line Tools for Xcode

次にCommand Line Tools for Xcodeをインストールします。
xcode-select --install
もしくは
Downloads for Apple Developers(要ログイン)
からダウンロード&インストールします。

ここまでで、C, C++, Objectice-C, Swift(Mac, iPhone)の開発環境は整っています。iPhoneはエミュレータもついてきます。
iPhoneの実機で実行するためのiOS Developer Programについては
はるふ's Innovation!!ーiOS Developer Programへの参加
をご参照ください。

3. Javaのインストール

Homebrewをインストールしたいのですが、その前に、Javaを入れる必要がある?(どちらかわからない)

Androidの開発にも必須です。

java -version
を実行したとき、インストールされていたらバージョンが、されていなければインストールするかきかれる(らしい)です。

インストールされてないのに聞かれなければ、
Oracle-JavaからJDKのMac OS Xをダウンロード&インストールします。

参考→QiitaーMacでJDKのバージョンを切り替える

4. Homebrewのインストール

インストールパッケージ管理に利用します。色々ブラウザからダウンロードするとバージョン管理が大変だったり、./configure;make;でエラーがでたらどうしようもなかったりと、homebrewを使うと便利です。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
これを実行
これにより、brewコマンドが使えるようになります
まずは指示に従い、
brew doctor
特に問題なければ、完了です。

基本のbrewコマンドは、

Homebrewのアップデート&再ビルド
brew update
brew upgrade

パッケージ名(formula)を検索
brew search (キーワード)

パッケージのインストール
brew install (パッケージ名)

パッケージのアンインストール
brew remove wget

インストールされたパッケージ一覧を表示
brew list

です。
※Homebrew派とMacPorts派といて、Homebrew派の方が多いイメージがあります。ただ、共に入れるのはよくないようです。

参考→Qiitaーパッケージ管理システム Homebrew

5. gitのインストール

最近のプログラマはとりあえずみんあGitを使っています。

brew install git
これだけでOKです。
gitの基本的なコマンドについては
はるふ's Innovation!!: サルでも分かるgit入門がわからない

6. お好みのエディタ

vimやemacsといったgeekなエディタは標準搭載しています。 Xcodeでの開発ならXcodeで開発できます。
その他で有名なのは、Sublime Text
やAtom
です。
お好みに合わせて。
※Sublime Textは無料で”つかう”ことができるのは事実ですが、長期利用は、有料です。

7. Pythonの開発

Pythonのバージョン管理ツールとして、Pyenvがよく使われます。
brew install pyenv
でインストール。 その後、
pyenv install -l
でインストール可能なパッケージ一覧が表示されます。

自然言語処理や科学計算などを行う場合は、anacondaをインストールすると、その他様々なモジュールを同時にインストールできて便利です。

2.7.9や3.4.3、anaconda-2.1.0やanaconda3-2.1.0など、
pyenv install 2.7.9
みたいな感じで、一覧の時に表示された時の名前を使ってインストールします。

Python 2.xとPython 3.xでわりと差があるので、どちらを使うかは、場合によります。そのため、anacondaもanaconda(2.x系)とanaconda3(3.x系)で分かれています。Pyenvを使っているなら、どっちもいれて、切り替えても問題無いです。
参考→Python 2 と Python 3 のどちらを使って開発すべき?

anacondaについて、詳細は以下のリンクをご参照ください
参考→QiitaーMacでPython3系ベースの機械学習環境設定(Python2系との共存)

以降は引数なしでpythonなら対話モードで、python (ファイル名.py)ならばそのファイルが実行されます。

pythonのモジュールの追加は、pipから行います。
はるふ's Innovation!!ーTweepy+Pythonによるユーザーストリーム〜pip, tweepyのインストールから〜(Mac)
を参照してください。
pip list
でインストールしたモジュール一覧を見ることができます。

Mecabを使う場合は、
brew install mecab
brew install mecab-ipadic
でmecabを入れます。これでコマンドからmecabを使えるようになります。

pythonから使えるようにするには、
pip install mecab-python
を実行します(python3なら右をpython3にする)
これで、pythonからimport Mecabを実行できます。

8. PHPの開発(Apache, FileZilla)

PHPはサーバーで処理を実行し、するので、デバッグにはサーバーが必要ですが、いちいち送るのはとても面倒です。そのため、PC上に仮想的にサーバー環境を構築すると便利です。
Apache(仮想のサーバー)はもともとインストールされています。
sudo apachectl start
により、Apacheを起動。startの部分をstop, restartにすると、停止, 再起動を行うことができます。起動している状態で、ブラウザに
http://localhost
を入力すると、
It Works!
が表示されます。表示されれば、起動しています。

ApacheでPHPを有効にするには、httpd.confというファイルを編集する必要があります。
vimエディタを用います。ちょっと扱いが難しいので、リンクをご参照ください→vimコマンド一覧

sudo vi /private/etc/apache2/httpd.conf
でvimが起動したら、i(挿入モードへ)
#LoadModule php5_module libexec/apache2/libphp5.so
を探して、先頭の#をとる
そのご、EscまたはCtrl+C(コマンドモードへ)
:wqを入力してEnter
PHPのバージョン管理をする場合は→PHP利用のための設定

以上で設定は完了です。

http://localhostは
/Library/WebServer/Documentsの中身を示します。つまり、ここのindex.htmlが読まれているので、ここに例えばsample.phpみたいなファイルを置いて、http://localhost/sample.php
にアクセスすると、PHPのサーバーの実行結果を見ることができます。

PHPのエディタには、僕はSublimeを使っています。

サーバーをかりているとき、サーバーにファイル送るときは、FileZillaを用います。

cakePHPはフレームワークの一つです。僕は使ったことがないので、調べてみてください。

※PHPで開発する際、いわゆるたとえば$が抜けている、のようなミスの時、何も表示されなくて困ります。そういう時はphpコマンドを実行すると、pythonの実行時みたいにエラー検出できます。

9. Androidの開発

Androidの開発は、これからの時代は、Eclipseではなく、Android Studioを使うべきです。(SDKは廃止予定とのことです)
参考:第 3 回・新 IDE : Android Studio を使ってみよう!
参考:【ADB】Java(JDK)とAndroid SDKを導入してADBコマンドを使えるようにする

公式のエミュレータはとても重いので、変える必要があります。公式以外のエミュレータとしてGenymobileなどを使うのもひとつの手ですが、公式も、intelのHAXMを使うと、早くなります→参考:Android SDK の高速エミュレータ、使ってますか?

Androidアプリのファイル構成は
QiitaーHello worldで分解するAndroid Studioのプロジェクトの内容
がわかりやすいです。

10. Unityの開発

インストールしましょう。


以上がやったことのある開発環境の準備です!

2015年3月3日火曜日

はじめてのWebAPI〜基礎とSwiftでの実装〜

APIとは、あるデータや機能を、他のプログラム(外部)から呼び出すためのインターフェースの仕様を示します。
そのうち、Web上にあるプログラムを用いるものがWeb APIです。

APIを用いることで、到底一人のプログラマには集められないようなデータを使えたり、機能を使えたりします。
APIとしては本当に色々あり、TwitterAPIやHOT PEPPER API、Google Maps API、Yahoo!のAPIなど、各社が様々なAPIを提供しています。
参考:ライブラリ・フレームワーク・APIの違い

APIを使う側についての記事です。

まず、身近な例として、普段見ているwebサイトについて。このブログの場合、
アドレス”http://ha1f-blog.blogspot.jp/”を入力すると、そのアドレスにあるサーバーに対し、HTTPリクエスト(ページの要求)が送信されます。それに対し、サーバーが応答し、HTTPレスポンスとして、ページの内容や画像を返します。
参考:IPアドレスとは
参考:Webサイト高速化に必要なHTTPの仕組みを理解する


そして、送られてくるデータは文字がずらずら並んだデータです。つまり、右クリックから「ページのソースを表示」をしたときに表示されるもの

こんな感じで見れます。(このブログでの例、HTML形式で記述されています)
これがこのブログの正体?です。このデータをブラウザが解析して、キレイに表示しています。

大体見れたかと思いますが、ネットからデータを取ってくる際に、データを取ってくるのが第一の課題、取ってきたデータをどう処理するか(パース)が第二の課題になります。


今回はRECRUIT Webサービスの一つ、HOT PEPPERのグルメサーチAPIを例に取ります。
ここから利用規約を読んで、登録すると、APIキーを発行することができます。

以降、keyは****************として表記しますが、自分で取得したキーを入れてください。

<第一の課題>
とりあえず
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=****************&format=json&lat=35.6800079345703&lng=139.768936157227
をブラウザに入力してみると、

こんな感じのデータが見れるかと思います。(今回はJSON形式のデータです)
ブラウザを使うと、データを取ってくるのは簡単ですね。

これをiPhone(Swift)で実現するには

// use NSURLSession
        var url: NSURL = NSURL(string:"http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=****************&format=json&lat=35.6800079345703&lng=139.768936157227")!
        var myRequest = NSMutableURLRequest(URL:  url)
        myRequest.HTTPMethod = "GET" 
        var task = NSURLSession.sharedSession().dataTaskWithRequest(myRequest, completionHandler: { data, response, error in
            if (error == nil) {
                //正常終了、レスポンスはdataに
                println(NSString(data:data, encoding:NSUTF8StringEncoding))
                }
            } else {
                println(error)
            }
        })
        task.resume()

このように記述します。

NSURLSessionを用いています。

NSURLConnectionは色々な通信を行うことができますが、http通信であれば、簡略化したクラスNSURLSessionを用いたほうが、楽に非同期通信を実現できます。
※非同期通信→並列処理。データを取ってくるのに時間がかかることが多いため、その分プログラムの動作を停止するのはもったいない。よって、バックグラウンドでも実行できるようにこの方式を使うことが多い。
参考:非同期通信

NSURL()によって文字で書かれたurlをurlの形式にエンコード

HTTPリクエストの形式は"GET"(受信)と"POST"(送信)の2つがありますが、今回はデータをPOSTする必要はないので、"GET"にします。これをNSMutableURLRequestの.HTTPMethodメソッドによって、行います。

そして、NSURLSession.sharedSession().dataTaskWithRequestによってタスクを生成し、task.resume()でそのタスクを開始しています。
つまり、生成されたtaskの中の命令が、task.resume以降にバックグラウンドで実行され始めます。

これで第一の課題終了です!と行きたいところですが、肝心のURL部分について説明していません。笑
URLはAPIリファレンスを見ながら考えます。

今回使ったURLは、
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/
?
key=****************
&
format=json
&
lat=35.6800079345703
&
lng=139.768936157227
と分解することができます。
これで、JSON形式で緯度経度が(35.6800079345703, 139.768936157227)周辺の店データを取得できます。

一つ目はアドレスで、?以降は引数のようなものになります。(引数名)=(内容)として、&でつないでいきます。どんな引数があるかは、リファレンスに示されています。

まずリクルートのAPIを使う場合は、key=****************が必須です。
formatは、標準はxmlとなっていますが、Swiftの場合はJSONのほうが扱いやすいので、JSONにしています。
lat=?とlng=?で緯度経度を指定しています。
他にも色々試してみましょう!

日本語を入れたい場合は、
        let query: String = textinput.text
        let encodedQuery: String = query.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
        var urlstring = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=****************&format=json&name=\(encodedQuery)"
こんな感じで、文字をエンコードしてから入れる必要があります。アドレスバーでよく見る%xx%xx%xxみたいな形式に変換されます。

これで本当に第一の課題完了です!


<第二の課題>
上のプログラムで、「//正常終了、レスポンスはdataに」の部分に、正常にデータを取得できた時の命令を足していきましょう。

まず取得したデータをそのまま見ると、(ブラウザの場合の画像参照)まあわけわからんぐらい長いデータが続いています。これをSwiftで解析するときには、SwiftyJSONが便利です。
SwiftyJSONはGitHubに公開されているので、こちらから利用させて頂きます。ここから、Source/SwiftyJSON.swiftをダウンロードして、プロジェクトフォルダ内にいれ、Drag&Dropでプロジェクト内に入れておきます。
これだけで使用準備は完了です。

あとは正常終了時のコードとして、
                let json = JSON(data: data)
                for i in 0...9{
                    if let stringdata = json["results"]["shop"][i]["name"].string{
                        NSLog(stringdata)
                    }
                }
を追加します。これでshopの名前が10個、出力されます。

一番上の行だけでJSONを解析してくれるので、あとはリファレンスを参照しながら、取り出したいデータを見ていきます。基本は[]の内部の値(辞書のキー)を変えるだけでOKです。(ブラウザで取得されたデータを見てもわかりやすいかもしれません)

標準では10件の店データが取得されるので、i=0〜9のデータを見ています。

web上の画像からUIImageを生成したい場合は、
                        let imgurl = NSURL(string: json["results"]["shop"][i]["logo_image"].string!)
                        var err: NSError?
                        var imageData :NSData = NSData(contentsOfURL: imgurl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!;
                        var img = UIImage(data:imageData)!
このようにします。

第二の課題は、SwiftyJSONのお陰で、とても簡単に解決出来ましたね!

本記事は以上です!

2015年1月6日火曜日

HACK U 京都大学


ずいぶんと前の事になりましたが、2014/12/20に、HACK U×京都大学というイベントに参加しました。
京都大学 デザイン学大学院連携プログラム主催、ヤフー株式会社共催のハッカソンイベントです。

Yahooで行われるハッカソンイベントHack Dayの大学生版で、2週間で作ることが課題でした。特に与えられたテーマなどもなく、「創作」であればOKでした

そのイベントに向けて僕らが作ったアプリケーションがARound グルメです。

自分の周囲にある店の情報と、Twitterで特定のハッシュタグ付き(アプリ内でつぶやける)でつぶやかれたレビューとを、カメラ画像の上にAR(拡張現実)として表示するiOS用アプリケーションです。
経路案内機能、評価をサーバーに保存/平均をとって出力する機能、ツイート機能などもついてます。


このイベントのために、僕はSwiftを、友人がSwift, PHP, データサーバを0からはじめ、なんとか完成しました。ソースコードはとっても汚いです

そして、努力した甲斐があり、最優秀こそ取れなかったものの、「技術賞」を頂きました。栄誉あることです!


最優秀はなんと高校のロボット部の先輩のチームで、研究室(松野研)のメンバーで出場していたそうです。二週間ですごいロボット作っていらっしゃいました・・・凄いです・・・

ロボット部の先輩方は、僕より上には4年しかいないのですが、東大ロボコンチーム80人を率いるリーダーをしていた方、学部2回生から学術論文の投稿や学会発表をしていた方、SECCONで上位の方など、すごい方いっぱいいます・・・
僕もすごいことしたいのに、どこまでなれるでしょうか(泣

最後話が変わりましたが、とりあえずもっと色々頑張りたいです・・・!

2014年12月11日木曜日

Swiftでの開発について


2つ前の記事iOS Developer Programについて書きました。

つまり手順を省略して書くと、Xcode(無料)さえあればSwift開発できるけど、実機デバッグするには有料の登録が必要、ということです



Swiftはまだ新しい言語で、書ける人は少ない、とおもいきや、めっちゃ簡単に書ける言語でびっくりです!
ドキュメントははじめこそ英語しかなかったですが、もう日本語もいっぱいでていて、初心者でも十分書き始められると思います!

ただ、わざわざSwiftに手を出そうとしてる人はきっとCぐらい書けると思うので、そういう人向けのドキュメントを紹介します。
(僕もまとめようかと思いましたが、既存のドキュメントで十分に揃っていますので、今後適宜、詰まった所や詰まりやすいところをご紹介していこうと思います)

準備は上記の通り、Xcodeだけです!



まずSwiftの入門として、僕がプログラミングを始めた中高時代にプログラミングを教えてくれていた先輩の記事
CAMPHOR- Tech Blog
すごく教えるのがうまい方で、とてもわかりやすいです。ただ、ToDoアプリを作ろう、のほうが少しまだエラーがあります。

基礎がわかったら、応用として、
Swift Docs
がおすすめです。
逆引きSwiftが強いです。正直、コピペだけで簡単なアプリが作れます



オブジェクト志向については別で学ぶ必要があるかもしれませんが、この2つでかなりのことができるようになると思います。


以下、少しだけ補足説明を。(CAMPHOR- Tech Blogを読み終わったあたりで読み返してみてください)



※Optional型について
Swift独自の特徴としてOptional型の変数があります。
var a: Int = 5
var a: Int? = 5
nil(空データ)をいれられるかどうかの違いですが、Swiftでは、変数を空にできないためにある仕様です。バグ防止のための仕様みたいですが、Cで言う"int a;"みたいなことができないことにはじめは戸惑うかもしれません

※CGFloatみたいな特殊な型について
オブジェクト志向なので、変な名前の構造体やクラスがあるのは当然のことですが、CGFloatみたいな、特殊な変数の型もあります。Objective-Cをしていないと戸惑うと思います(僕もそうでした)
これ実は裏ではtypedefされていて、たとえばCGFloatは64bitsシステムならdouble、32bitsシステムならfloatを表します。
怯まずに進みましょう。

2014年12月9日火曜日

iOS Developer Programへの参加


iOS Developer Programに登録しました。
登録がややわかりにくかったので、まとめておきます。

年会費¥7800かと思えば税抜で、税込¥8424になります。消費税8%を久々に恨みました……
それにアプリで¥7800も稼げると思えないので、明らかに赤字です……

Apple Developer Programへの登録がまだの人は、ここから登録してください。こちらは無料で、登録するとXcodeがダウンロードできるようになり、Objective-CSwiftも、ひと通り開発できるようになります。OSXのアプリもiOSのアプリも開発できます。
また、iPhoneのSimulatorも付属しているので、実際に動かして試すこともできます。

ただ、iOS Developer Programが有料、それもかなり高額な理由にはわけがあります。

まず1つ目は、Simulatorではハードウェアに制限があります。GPS情報はある地点に固定されていて、カメラを起動しようとするとエラーで終了します。加速度センサなども同様です。

2つ目は、アプリをiPhoneに転送出来ず、Simulatorで動かすことしかできません。登録すると、Xcodeから直接端末転送して、動かすことができます。カメラなどを使うにはこの方法しかありません。

3つ目は、Apple Storeにアプリを並べられません。


iOS Developer Programの登録はわかりにくかったので、簡単にまとめます。

まずここからiOS Developer Programに登録します。ギフトカードのみ、またはクレジットカードのみでの支払いが可能です。

登録後、Apple Developerのページの右上"Member Center"から"Your Account"→"Legal Agreements"に
iOS Developer Program License Agreement
があることを確認して下さい。

確認できたら、証明書を発行してもらう作業が必要です。
ここのサイトを見ながら、発行し、登録しましょう

ここを見ながらApp IDの取得、デバイスの登録を行います。iOS Dec Centerのページから行います。
ただし、OrganizerからDevicesを見よ、と書いてありますが、Xcode 6ではDevicesはWindowメニューにOrganizerと並列して存在します。

しかし、Provisioningファイルの読み込みがうまくいきませんでした。Xcodeの仕様がかわったためのようです。
ここを参照してみてください。とりあえずXcodeのPreferenceからApple IDにログインし、右下のView Detailsから詳細をみて、さっき作ったprofileが入っていればOKです


以上で作業は完了です。とても複雑ですね。

Xcodeの左上のボタンから、デバッグ先を接続中のiPhoneにできます。
プロファイルのエラーおこっても、何度も繰り返していると治りましたので、なんども繰り返してみてください

Swift頑張ります〜〜7800円〜〜