2014/12/29

[Swift] required init(coder aDecoder: NSCoder) の "coder" って?!

タイトルのままです。

プライベートが忙しく久しぶりに Swift を触ってみたのですが、
この " coder" が何を指しているかわかりません ^^;


class ViewController: UIViewController {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    override init() {
        super.init()
        
    }
}

みなさん頻繁に出会うはずなのですが、特に情報もなく...
ご存知の方いらっしゃったら、教えてください!

2014/10/19

[Xcode, Git] Xcodeで作成した Git リポジトリにタグを追加する方法


せっかくGitでソース管理をしているので、次の開発へ入る前にリポジトリにタグをつけておきたいですよね。
しかし、Xcode(5.1.1)ではGitのリポジトリにタグをつけることができません。
「困ったぞ...」と思っていたのですが、「他のツールやコマンド使えばできるんじゃ?」と思い、「SorceTree」を使用してタグを付けることに成功しましたのでご紹介します。

1.ツールの準備

「SorceTree」を以下からダウンロードし、Macにインストールします。
(昔、私がインストールした時はメールアドレスの登録が必要でしたが現在は不要になった?)

  ・SorceTree - Atlassian.

「SorceTree」の基本的な使い方は、詳しく解説されている方いらっしゃるので、ここでは割愛します。

2.リポジトリのクローン(ソースの取得)

対象となる(XcodeでPushしている)リポジトリをローカルにクローンします。 私は以前書いた記事のとおりDropbox上にリポジトリを作成しているので、対象となるディレクトリまでのフルパスを指定しています。


3.タグ付け

それではタグを付けます。
2 の手順で、[ブランチ] → [master] にローカルリポジトリを作成しているので選択します。
あとは↓の画像のとおりタグを入力するだけです。
(ここでは "V1.0.0_B2.0" と入力しました)


タグが付いていることを確認します。


以上でタグ付けは完了です。
注意したいのは、ここでタグ付けを行ってもXcode上から確認できないということです。

もし、Xcodeからタグの確認を行えるようでしたら、コメントなどでご指摘お願いします。


2014/10/17

[iOS,アプリ,ScanSnap] (追記アリ)ScanSnapをもっと便利にするアプリ「SSLauncher」をリリースしました



今回、個人として初めてアプリをリリースする運びとなりました。
本日はそのアプリの紹介をしちゃいます。








その名も「SSLauncher」です。(バージョン2.0.0にアップしました15/03/30追記

SSLauncher を使えば ScanSnap Connect Applicationと連携し、ScanSnap でスキャンしたドキュメントを「自動」で「簡単」にクラウドへアップロードできます。
(※)対応するクラウドは随時追加していきます。

 ----- 15/03/07追記 -----
   リクエストいただきありがとうございました(レビュー励みになっております)。
   Evernote対応をいたしました(今後も便利な機能を追加予定です)。
   この機会に是非ご利用ください!
 -------------------------




SSLauncherの特長は↓のようになっています。
■特長1 ワンタップでクラウドへ
ワンタップするだけでスキャンが始まり、あらかじめ指定したクラウドの場所へドキュメントをアップロードします。
毎回、ドキュメントの保存場所を指定する必要はありません。

■特長2 読み取り設定、アップロード先を個別に記憶できる
読み取り設定、アップロード先をドキュメントに合わせて記憶させておけるので、スキャン時は好きな設定を選ぶだけでOK!

■特長3 スキャン実行時にファイル名を指定できる
スキャン実行時にファイル名を自由に指定できます。もうスキャン後にファイル名を編集する必要はありません。

つまり、こんな人向けです。
■ 手間なくクラウドの特定のフォルダへドキュメントをアップロードしたい
■ 同じ分類のドキュメントは同じフォルダに簡単にまとめておきたい
■ ドキュメント毎にスキャン設定を変更してスキャンをしたい

使い方

それでは、SSLauncherの使い方を説明していきます。

1. 環境の確認

SSLauncherを使用するには、以下のソフトウェアやスキャナなどが必要です。

 ・ScanSnap Connect Application V2.4.0 以降(iOS版)
 ・ScanSnapシリーズ
 ・Dropboxのアカウント


動作確認済みの ScanSnap は以下です。
    (※)他の機種での動作結果について、フィードバックをくださると助かります(連絡先は最下部にあります)。
・iX100
・iX500
  

2. 事前準備

1. SSLauncher を App Store からインストールします。




2. ScanSnap Connect Application(以降、SSCAとします) を App Store からインストールします。
 (※)Dropboxのアプリはインストールしていなくても大丈夫です。

   



3. SSCA と ScanSnap の接続設定を行います。
 詳細はPC上の ScanSnap Manager の設定手順やSSCA内の使用方法をご覧ください。
 (※)既にSSCAをご利用の方は、改めて設定する必要はありませんです ^^
 
 
 

iX100は、SSCAでセットアップウィザードが用意されておりとてもわかり易かったです。


4. SSLauncher を起動し、[設定] → [クラウド] → [Dropbox] を押下します。
  Dropboxとの認証画面が表示されるので、 [許可] を押下してください。

    
















5. [+] ボタンを押下して、Dropboxへのドキュメントの保存先やスキャン時の用紙サイズ、画質などを設定します。




6. 作成するとLauncherが表示されます。



以上で準備はできました。それではいよいよスキャンを行います!!

3. スキャン 〜 アップロード

1. Launcherをタップします。



 2. SSCAが起動し、スキャンが開始されます。

 


 3. ScanSnapでドキュメントを読み込み、スキャンが完了したら終了ボタンを押します。



 4. SSLauncherが起動し、スキャンしたファイルがクラウドへアップロードされます。
   ステータスバーの(時刻などを表示している)位置にアップロード状況が表示されます。

  


※Dropboxアプリでアップロードされていることを確認してみます。
あらかじめLauncherで指定したフォルダにアップロードされていることが
分かると思います(左図)。

 


以上でSSLauncherの使い方の説明は終了です。
2回目以降は「3. スキャン 〜 アップロード」の手順を繰り返せばどんどんクラウドへドキュメントをアップロードできるので、とても簡単です。


4. その他

すべての機能は無料でご利用できます。
ただ、スキャン回数などに上限が設けてありますので、もし気に入ってくださった方はフル機能をご購入いただけますと幸いです。


5. フィードバック先

「こんなクラウドに対応して欲しい」、「こんな機能あったらいいのに」、「このScanSnapで使えたよ」など、ありましたら↓にフィードバックをお願いします。
可能な限り対応していきます。

  toomoo.feedback@xxx     ← xxx は、gmail.com となります


6. 技術的内容

本当はSwiftで作成したかったのですが、開発スピード優先で今回は見送りました。
今後の追加機能などはSwiftで作成できるよう取り組んでいきます。


-----
それでは、このアプリが皆さんのScanSnapライフに役立つことを願っております♪







※当方は株式会社PFUとは関係ありません。このアプリについて株式会社PFUへお問い合わせを行うのはご遠慮願います。

・ScanSnap は株式会社PFUの日本における登録商標または登録商標です。
・Dropboxは、米国Dropbox, Inc.の商標または登録商標です。
・その他、記載されている社名及び商品名はそれぞれ各社が商標または登録商標として使用している場合があります。

2014/07/17

[Swift, iOS]playgroundでUIKit(UIButtonなど)を使用する方法

playgroundを使用していて、なんでUIButtonを宣言できないんだ?
と思ったので調べました。

1)playground を起動し、 「File Inspector」を表示する

Xcodeのメニューから「Show File Inspector」を選択し、「File Inspector」表示します。



2)Platformを「iOS」に変更する

[Playground Settings] → [Platform] を「OS X」から「iOS」に変更します。



3)「UIKit」を import に追加する

import に「UIKit」を追加し、既存の「import Cocoa」を削除します。



以上で準備は完了です。
 では、UIButton を定義してみましょう。



結果もすぐに確認できてとても便利ですね〜。

-----
Xcode 6 Beta 3 は無料でDLできるようになりました(Apple Blog)。
皆さんどんどん遊んでみましょう。


2014/06/29

[Swift, iOS]Swiftのmapとreduceについて書いてみた


Swiftについて勉強していく中で一番興味引かれたキーワードが「関数型言語」でした。
中でも以下のサイトを拝見させていただいたことで一気に関数型言語の理解が進みました!!
この場を借りて感謝を述べさせていただきます。

 ・Swiftで脱アルゴリズム!iOS開発を関数型(宣言型)プログラミングへパラダイムシフトしてみる【脱アルゴリズム宣言①】

(追記 22:26)
Swiftは関数型言語ではないという記事を見つけました。
 ・Swift Is Not Functional

mapとreduceについて

関数型言語と命令型プログラミング言語について語る上で、よく引き合いに出されるメソッドのようです。
この2つのメソッドを利用することで for文 や if文 を記述する回数を減らし、バグの少ないコードが書けます(理由は上記のサイトをどうぞ)。

Swiftでもmap, reduceが使える

Swiftでもmap, reduceが使えます!

let arry = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// map
let mapRet = arry.map{
    
    (var n) -> Int in
    
    return n + 2;

}
mapRet        // [2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12]


// reduce1
println("reduceRet1")
let num = 0;       
let reduceRet1 = arry.reduce(num){     // |num| は |m| の初期値
    
    (var m, var n) -> Int in
    
    println("m = \(m), n = \(n)")
    
    return m + n    // return値が次の|m|の値となる
}
reduceRet1      // 55

mapについては特に説明不要でしょう。配列のすべての値に対して 2 を足しています。
reduceで注目すべきは num です。ここでは num の値を 0 としていますが、値を変更することで、 m の初期値を変更する事ができます。
m, nの具体的な値の変化は以下です。


非常に便利&完結にコードを書けますね。Swiftで開発するときは積極的に利用していくべきでしょう。

(おまけ)無名関数の書き方

以下のように色々な書き方ができるようです。
開発時はチーム内で統一した方がよさそうですね。

// reduce2
// return 削除
let reduceRet2 = arry.reduce(num){
    
    (var n, var m) -> Int in n + m
}

// reduce3
// さらに戻り値の型 削除
let reduceRet3 = arry.reduce(num){
    
    (var n, var m) in n + m
}

// reduce4
// $ のみで書く。変数 |n|, |m| の変わりです。
let reduceRet4 = arry.reduce(num){ $0 + $1 }




2014/06/04

[Xcode, Git]Xcode 5 のGitでDropboxをリモートリポジトリとして使用する方法

色々あって作業&ブログ更新が思ったよりできていません。なんとか夏までにはどのような形でも良いのでアプリをリリースすることを目標に作業しなくちゃ。

さて今回は、Xcode 5のGitでDropboxをリモートリポジトリとして使用できるようにする方法を紹介します。
試した環境はこちら↓

  ・OS X 10.9.3
  ・Xcode 5.1.1
  ・Mac OS版 Dropboxクライアントが必要
  ・Mac OS用 Gitクライアント


Step1:ローカルリポジトリの作成 〜 コミット


1)新規プロジェクトの作成
  Source Controlにチェックし、ローカルリポジトリを作成します。

  余談ですが、プロジェクトの途中からリポジトリ管理を追加するのはとても
  手間がかかるようです。
  



2)ソースの編集
  まずはソースを編集してビルドしてみましょう。するとソース名の右側に「M」(Modify:修正)が付きます。


3)ソースの追加
  次にソースを追加すると、ソース名の右側に「A」(Add:追加)が付きます。


4)ローカルリポジトリへのコミット
  [メニュー] → [Source Control] → [Commit...] を選択することで、変更のあったファイルがすべて一覧表示されます。
  また各ソースを選択することで、ソースのどの箇所に変更があったかを表示してくれます。
  変更箇所を確認し、コメントを記入後コミットします。
  (コメントは日時、変更者、要点などフォーマットを決めておくとよいでしょう)



5)コミットの完了
  コミットが完了すると「M」、「A」などのマークが消えます。



Step2:Dropbox上でのリモートリポジトリの作成 〜 Push


Dropbox上にリモートリポジトリを作成します。
あらかじめ「Mac OS版 Dropboxクライアント」と「git」をインストールしておいてください。


1)フォルダの作成
  Dropbox上にフォルダを作成します。ここでは「GitTest2」という名前にしています。
  Xcodeにこのフォルダの絶対パスを設定するのでメモしておいてくださいね。


2)フォルダの初期化
  1)で作成したフォルダを、ターミナルから以下のコマンドを使用して初期化します。

  $git --bare init


  初期化に成功すると以下のようにリポジトリ管理用のファイルが作成されます。


3)Xcodeへリモートリポジトリの設定
  [Xcode] → [Source Control] → [フォルダ名称] → [Configure フォルダ名称] を選択して、
  リモートリポジトリを設定するダイアログを表示します。


[Remotes] → [+] を選択。




  以下の2つを入力します。
    Name:識別しやすい名前
    Address:Dropbox上に作成したフォルダのフルパスを指定


  リモートリポジトリが正常に追加されました。


4)リモートリポジトリへのPush
  設定が無事完了したら、早速リモートリポジトリへPushしてみましょう!  
  [Source Control] → [Push...] を選択してダイアログを表示します。


  3で作成したリポジトリを選択します。
  「Repository is online」と表示されていれば、正常にPushできます。
  成功すると「successful」と表示されます。


5)Dropbox上でPushが成功したか確認
  以下のファイルの更新日時がPushした時間になっていれば、成功です。
  

Step3:リモートリポジトリからのCheck Out


Step2で作成したDropbox上のリモートリポジトリから、プロジェクト一式を取得します。

1)Welcom to Xcode を表示します。


  [Check out an existing project]を選択します。


2)Dropbox上のフォルダの絶対パスを入力
  Step2の1で作成したフォルダの絶対パスを入力します。



3)プロジェクト一式の配置場所を指定します。




4)Check Out に成功するとプロジェクトが立ち上がります

























以上で作業は完了です。
おつかれさまでしたー。

WWDCでiOS8やSwiftが発表されましたね。
これからも忙しくなりそうです :-)