Androidはワンツーパンチ 三歩進んで二歩下がる

Android卵プログラマーの記録ブログ

Appleの公式Swiftチュートリアル「A Swift Tour」を勉強した感想。「FoodTracker」より先にやるべきだった!

iOSアプリを作るためにSwiftを勉強中です。
Apple公式の学習用ドキュメントに用意されている「A Swift Tour」を使用したので感想です。

f:id:sakura_bird1:20171215020027p:plain

「A Swift Tour」って?

Swiftのドキュメントの中にあるチュートリアルです。
developer.apple.com

「Playground」というxCodeの実行環境を使用して手を動かしながら学んでいけます。

ダウンロードのリンクから落としたGuidedTour.playgroundというファイルを
ダブルクリックすれば始まります。(xCodeがインストールされてる前提)
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.playground.zip

学んだこと

Swiftの基本的な文法を一通り触ることが出来ました。
Playgroundが実行途中の計算結果を表示してくれるので、自分で
コードを変更することでどのように動くかわかりやすく
役に立つチュートリアルだったと思います。

ただし、詳しいことはあまり書いておらず概要を説明しているのに過ぎないので
違うサイトで情報の補足をしていました。

もっと詳しい情報は「Language Guide」を読むべきでしょうね。

大体章の区切りで、「Experiment」という課題が用意されています。
これに結構頭を悩まされました。
読んでる時はうっすらわかったような気がしても、
書けと言われると書けない!
身につけたかったら手を動かしてアウトプットするって大事ですね。

Playgroundを触った感想

書くそばから実行されて結果が表示されるので、
いちいちビルド→実行しなくてもよくて
とてもいいです。

画像表示や複雑な処理も出来るみたいなんで
アプリ作成中も役に立ちそうです。

ゴチャゴチャ書いてるそばからエラーが出ますw
ちょっと処理が重い感じがしました。

学習の順序など

ついこの間まで、Appleの公式iOSチュートリアル「FoodTracker」というものを使って
アプリ作りの基礎を学んでいました。

「FoodTracker」公式サイトはこちらです。
Start Developing iOS Apps (Swift): Jump Right In

勉強した感想の記事はここです。
Appleの公式iOSチュートリアル「FoodTracker」をやってみた感想と勉強の動機 - Androidはワンツーパンチ 三歩進んで二歩下がる

このチュートリアルもすごく良かったんですが、swift文法を知らないまま
最後まで進めてしまいました(笑)
これはちょっと失敗だったかなと思っています。

FoodTracker進行中もクラス名でググったりはしてましたが、
「A Swift Tour」を先にやっていればもっとアプリ作成方法に集中できたのに!
と思います。

今後の予定

Apple公式のプログラミングガイドから気になるやつを学習できればと思っています。
日本語ドキュメント - Apple Developer

しかし、そんなに丁寧にやらずにざっと目を通すぐらいかな。

ミニサンプルみたいなプロジェクトをいくつか作りながら
プログラミングガイドや言語リファレンスや他の参考サイト様などを
行ったり来たり、でしょうか。

並行して優れたswiftのコードを読んでいけたらと思います。
きっと読んでも最初のうちは何が何だかわからないとは思いますが、
しばらくやってれば少しは見慣れてバラバラの知識がまとまって
くるのではないでしょうか?

本家コード!(※これを読むという宣言ではありません)
github.com


SSH認証界☆最高☆の秘密鍵「Ed25519鍵」を生成する。GithubのSSHキーを変更する。

Ed25519鍵って?

現在(本日は2017年12月3日です)もっとも安全なアルゴリズムとのことです。
参考サイト様
linuxfan.info
sshでed25519鍵を使うようにした - @znz blog


「Ed25519」でググるとなんだかよくわからないけど、ツイストしたエドワーズ曲線とかロマンを感じなくもないです(・∀・)

エドワーズ曲線デジタル署名アルゴリズムは、公開鍵暗号において、ツイストしたエドワーズ曲線(Twisted Edwards curve)に基づくシュノア署名(Schnorr signature)の一種を用いたデジタル署名の一つである。他のデジタル署名において見つかっている安全性に関する問題を回避した上で、高効率で暗号化処理が行われるように設計されている。エドワーズ曲線電子署名アルゴリズムは、ダニエル・バーンスタインが率いるチームによって開発された。

エドワーズ曲線デジタル署名アルゴリズム - Wikipedia

このエントリでは
Githubで登録しているSSH秘密鍵をEd25519の鍵にします。
Ed25519鍵はホスティングサービスが対応していれば使用できます。
Githubは使用できます。

本当はBitBucketもEd25519の鍵に変更したかったのですが
対応されていないのか色々調べたのですがうまく行かなったです。
結局公式サイト(Invalid SSH Key - Atlassian Documentation)のとおりに設定しました。


Ed25519鍵を生成する

早速生成してみます。Ed25519鍵の生成は、「ssh-keygen -t ed25519」コマンドで行います。

$ ssh-keygen -t ed25519

いくつか聞かれますがエンターでOKです。
Enter file in which to save the key → そのままenter
Enter passphrase (empty for no passphrase): → そのままenter
Enter same passphrase again: → そのままenter

これで生成できたので、中身をコピーしてGithubやBitBucketの鍵を変更します。

$ pbcopy <  ~/.ssh/id_ed25519.pub

GithubSSH鍵を変更

こちらが公式サイトの解説ページです。
Connecting to GitHub with SSH - User Documentation

githubにアクセスしてログインします
https://github.com/

・画面右上のユーザーアイコンを押して「Settings」をクリックします。

・左側の「Personal settings」の中から「SSH and GPG keys」をクリックします。

・古いSSH鍵が登録されていたら「Delete」ボタンで削除します。
 この時削除するのは先程Ed25519鍵を生成したPCで登録した鍵です。
 複数の端末から利用している場合は気をつけて下さい。

・「New SSH Key」ボタンをクリックします。

・「Key」の中にさきほどコピーしたテキストをペーストします。
 タイトルはこの端末であるということがわかるように任意のタイトルを入力しておきます。

・「Add SSH Key」ボタンをクリックして保存します。

正しく追加されたか次のコマンドで確認します。

$ ssh -T git@github.com

「You've successfully authenticated, but GitHub does not provide shell access.」などと表示されればOKですが、
詳しくは公式サイトで確認してみてください。
Testing your SSH connection - User Documentation


Appleの公式iOSチュートリアル「FoodTracker」をやってみた感想と勉強の動機

f:id:sakura_bird1:20171122230703p:plain:w200

なぜiOSの勉強をはじめたのか

ここ最近iOSのプログラミングの勉強をやっています。

元々Androidのアプリを開発してリリースしているアンドロイダーだったのですが
昨年からiPhone7をメインのスマフォにしてしまいました。

自分のアプリを使いたい時に、Android版しか存在しないため
サブ端末であるAndroid機をゴソゴソと取り出す日々に

この状況はおかしい

と苛立ちを感じました。

iPhone7は高かったし、まだまだ使うつもりなので状況を打破すべく
やっと重い腰を上げてiOSに取り組むことにしたのでした。

正直言いますと、Appleデベロッパー税が年間1万円以上かかったり
アプリ審査が厳しく、時にちゃんと審査してないんじゃねえか?疑惑の話を
耳に挟むことがありましたので、今まで腰が引けていました。

しかし、取り組むと決めたからにはアプリをリリース出来るよう頑張りたいです。

具体的にはWeb版→Android版とリリースしてきた
ポケット糖質量iOS版を作りたいです。

「ポケット糖質量」とは

糖質制限をしている方などを対象に、糖質量をリスト表示
検索出来るようにしたシンプルなアプリです。
データも手元で作成しており、Web検索するより効率よく糖質量を見ることが
出来るようになっています。

Web版「ポケット糖質量」Ruby on Railsで作りました。

www.pockettoushituryou.com


Android版「ポケット糖質量」Web版より使いやすいです(;^ω^)

play.google.com

Appleの公式iOSチュートリアル「FoodTracker」とは

Appleの公式iOSチュートリアル「FoodTracker」は↓ここ↓です。
developer.apple.com

Swift3(2017/11/22現在)を使って、
食品データ(食品名・画像・評価の★)をリスト表示、
詳細表示します。

データの追加・削除・更新も行います。

スマホアプリでは定番の処理なのですぐに役に立ちます。

f:id:sakura_bird1:20171122150551p:plain

学習者である私の現状

プログラミング経験

Android(Java)で開発経験ありですが、レベルは初中級ぐらいです。
英語は中学レベルの文章を読解出来るレベルです。
iOSは2年以上前に入門書をナナメ読みしたけど、全て忘れてしまったレベルです。

私の開発環境

Mac book pro Retina 15inch MID2015 メモリ16GB SSD512GB
Mac OS Sierra バージョン10.12.6

Xcode9.1
Swift3.2
Base SDK Latest(iOS 11.0)
iOS Deployment target iOS10.0

ソースコード

公式サイトには無いコードも入っています。
すぐ試せそうな処理を入れてみました。
アラートダイアログ、設定値などの永続化、画面の背景画像設定、スプラッシュ画面など
github.com

FoodTrackerで学んだこと

このチュートリアルで学んだことをざっと挙げますと以下のようになります。

xCodeの使い方

プロジェクトの作り方
プロジェクト内の情報の見方
編集画面の切り替えや展開の仕方
ビルドや実行の仕方
ターゲットの端末でのプレビューの見方

storyboardを使ったUIの作り方

sceneに画面のパーツを配置する
inspectorで属性を指定する
Auto Layoutを使用しconstraintsでレイアウトに制約を指定する
StackViewで同じ方向にあるViewをグルーピングする
Navigation Barを使用する
Viewをソースコードに接続する
pushとmodalの画面の出し方の違いを理解する
セグエを使い画面遷移を行う

カスタムビューを作る

ソースコードから動的なViewを作る
storyboardにカスタムビューを表示する
InterfaceBuilderの機能を使用してアプリの実行をせずに表示確認する
asset catalogを利用してプロジェクトに画像を設置する

Controllerに処理を記述する

コントローラーのライフサイクルとコールバックを理解する
delegateメソッドの無いViewにTap Gesture Recognizerを利用する
Image Pickerを実装する
画面遷移した際にデータの変更が発生した時、遷移元の表示も変更する
データを永続化する

Accessibility

視覚障害などをサポートするアクセシビリティの情報の実装を行う

データモデルを実装する

データ構造を実装してデータの永続化や読み込みなどに使う

ユニットテストを実装する

XCTestフレームワークを利用する
データモデルのテストを実装

Swiftについて

Optional型の理解をする
guardを理解する

感想

簡潔でありながら大事な所は押さえてある良いチュートリアルだと思いました。

あくまでもアプリの作り方であって、Swift言語の説明はOptional型のところなど
を限定的に説明する程度でした。
言語仕様は別のところで覚えたほうがよいですね。

StoryBoardで画面を作っていく方法は独特で、チュートリアルでかなり
取り上げられていたのは良かったです。

たまに古いSwiftで書いてあるのか、コンパイルが通らない箇所がありました。
でもInterface Builderの接続が切れた?時の方がずっと訳わからなかったです。

英語は難しい表現は無いので、Google翻訳を併用すれば問題ないと思いました。
と、いいつつわからない箇所は日本語でググってQiitaとかを参考にしていました。
どんなに簡単なことでも、初学者にとっては情報を残していただけているという
ことはほんとに有難いことです。
情報を書いてくださってる方々、ありがとうございました!

今後ですが、

もうこういう公式チュートリアルって無いのでしょうかね(・・?
APIのリファレンス見ただけで実装出来る自信は無いんですが、
(実装出来たとしてもすごい時間かかりそう)
書籍を買った方がいいのかどうか、迷っています。

公式チュートリアルがSwift3なのにすでにSwift4が出てるんですが。。
書籍の陳腐化が激しいと聞いたことあるしどうしたものか。

とりあえず以下のことを知りたいと思っています。
しばらくはググってなんとかしてみようかな。
・複数の画面サイズに対応する良い方法
・CoreDataの使い方
・HTTP通信
・外部ライブラリの利用
・ローカルに保存したファイルの読み込み

以上です。





オンラインブートキャンプ 無料体験

Appleの公式iOSチュートリアル「FoodTracker」でナビゲーションバーをダブルクリックしてもタイトル入力欄が現れない

私の開発環境
Xcode9.1
Swift3.2
Base SDK Latest(iOS 11.0)
iOS Deployment target iOS10.0

iOSでコードを書いてる人にはしょうもない話だと思いますが…

チュートリアルでナビゲーションバーをダブルクリックしてタイトルを入力すべき
箇所でタイトル入力欄が現れませんでしたので
一応メモしておきます。

チュートリアルの該当箇所はここです。
Start Developing iOS Apps (Swift): Implement Navigation

Double-click the navigation bar in the meal list scene.

A cursor appears in a text field, letting you enter text.

Type Your Meals and press Return. This sets the title for the table view controller’s navigation item.

とか書いてあるのですが、実際にナビゲーションバーをダブルクリックすると
画面が拡大、縮小します。
入力欄が現れることはありませんでした。

原因はわかりませんでした。
そのうちわかったら追記します。

対処方法というほどのことはないですが、
以下の方法でタイトルを入力できました。

その1.ナビゲーションバーを選択した状態でAttributes InspectorのTitleという
    場所にタイトルを入力する

f:id:sakura_bird1:20171115005042p:plain:w300


その2.Show the Object Libraryの中から「Navigation Item」を探し
    ナビゲーションバーにドラッグする。
    Titleと文字が現れるので、ダブルクリックして編集する。

f:id:sakura_bird1:20171115005725p:plain:w300

Appleの公式iOSチュートリアル「FoodTracker」をやってる最中に「無料で実機にインストールしてデバッグ」をどうしても出来なかったある理由

少し間が空いてしまったのですが、まだAppleの公式iOSチュートリアル「FoodTracker」を写経中です。

私の開発環境
Xcode9.1
Swift3.2
Base SDK Latest(iOS 11.0)
iOS Deployment target iOS10.0

現在チュートリアルのカスタムUIを作っているあたりです。
↓のリンクでAccessibilityの実装をしているところです。
Start Developing iOS Apps (Swift): Implement a Custom Control

Accessibilityについては公式サイトのこちらが詳しいです。
Accessibility on iOS - Apple Developer

AccessibilityにVoiceOverという機能があり、端末の設定画面からVoiceOverを有効にしておくと
UIをタップすると音声自動読み上げで
フィールドの説明や現在セットしている値、
アクションの説明などを喋ってくれます。

FoodTrackerでも一部のフィールドにAccessibilityのラベル、ヒント、フィールドの値
を設定しています。

しかし、シミュレーターだと声が出ないのです。
(この原因はまだ調べていないので、今は何が悪いのかはわかりません。)

そこで前からやりたかった実機にインストールをやってみようと思いました。

参考サイト様
qiita.com

qiita.com

参考サイト様を参考にさせていただき、

1.Xcode > Preference > Accounts
  より+ボタンを押して、自分のApple IDを追加します。

2.1で表示したダイアログ のManage Certificates...を押します。
  +ボタンを押して、ドロップダウンリストより「iOS Development」を選択します。
  (既にありますよ的なメッセージが表示されるかもしれませんが、それはそれでOKです)

3.プロジェクト設定を開きます。
  プロジェクトナビゲーターの一番上のXcodeアイコンのプロジェクト名をクリックし、Generalタブを選択します。

4.General > Signing > Team で1で追加したApple IDのチームを選択します。

f:id:sakura_bird1:20171110011409j:plain

(注:上のスクショは上手くいっている状態です。)

あとは実機の設定でApple IDを信頼してやればいいのですが、ここでエラーが出てしまいました。

エラーメッセージは「Failed to create provisioning profile」などとなっていて、
ちょうどここのサイトと同じような状態でした。
xcode - Failed to create provisioning profile - Stack Overflow

解決策もここの中に
xcode - Failed to create provisioning profile - Stack Overflow

何がエラーになってたかというと、bundle identifierがユニークでなかったのですね。
Androidですと、パッケージ名のようなものですが、

リリースしなければユニークでなくても問題なく
実機にインストール出来るので

おお、そういうものなのか、と感心しました(●´ϖ`●)

そこで、bundle identifierを変更して解決しました。

プロジェクト設定 > General > Identity > bundle identifierを変更しました。
私は
com.example.FoodTracker

com.sakurafish.example.FoodTracker

に変更しました。

f:id:sakura_bird1:20171110012537p:plain

以上です。

XcodeのInterfaceBuilderの機能、@IBDesignableを使うとカスタムビューをリアルタイムでプレビュー出来て便利

Appleの公式iOSチュートリアル「FoodTracker」をやっています。
今↓この辺なのですが、カスタムビューを作っています。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementingACustomControl.html#//apple_ref/doc/uid/TP40015214-CH19-SW1


XcodeのInterfaceBuilderの機能である、@IBDesignableを使うとInterfaceBuilder上でカスタムビューの表示を確認できますが、
Androidではカスタムビューはいちいち実行して調整していたので嬉しい機能です。

アニメーションにも対応してるのか気になりましたが、2017年10月時点ではどうかわからないですが、こちらのサイト様情報ですと出来無さそうっぽいです。
qiita.com


使い方はクラス宣言のところに@IBDesignableを付けてビルドするだけです。

@IBDesignable class RatingControl: UIStackView {


また。@IBInspectableというものを付けてビューのプロパティを宣言するとInterfaceBuilderでプロパティ変更出来るようになります。didSetオブザーバーをoverrideしてUI属性の変更を反映する必要があります。

  @IBInspectable var starSize: CGSize = CGSize(width: 44.0, height: 44.0) {
    didSet {
      setupButtons()
    }
  }

f:id:sakura_bird1:20171013033512p:plain

@IBInspectableはチュートリアルをやっただけでは開発効率が良くなりそうな実感が得られず、微妙な印象です。

Appleの公式iOSチュートリアル「FoodTracker」で カメラロールから画像選択する所でInfo.plistにPrivacy - Photo Library Usage Descriptionを追加してないのにクラッシュしない(未解決)

私の開発環境
Xcode9.0
Swift3.2
Base SDK Latest(iOS 11.0)
iOS Deployment target iOS10.0

今回クラッシュしたという問題ではなく、クラッシュしなくて???となりました。
メモです。

チュートリアルの↓の下の方で、iOS10以上はフォトライブラリへのアクセスの際にユーザーにパーミッション許諾ダイアログ表示する処理を記述していないためにクラッシュするようになっている箇所があります。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html#//apple_ref/doc/uid/TP40015214-CH6-SW1




私のinfo.plistにはPrivacy - Photo Library Usage Descriptionを追加していません。

f:id:sakura_bird1:20171011031259p:plain:w200

でも許諾ダイアログの表示などもなくクラッシュもすることなくアクセス出来ています。

f:id:sakura_bird1:20171011031357p:plain:w200

バッチリカメラロールの画像が表示されます。
f:id:sakura_bird1:20171011031427p:plain:w200

これは何がいけないのでしょう(・・?
くだらないミスをしているんだろうなーとは思うんですが、わからない。

公式チュートリアルXcodeのバージョンが8.1前提ですが、私は9.0です。
関係あるかー?無さそうなんだけどねえ。

まあ、このままチュートリアルを進めてみます。
何かわかったら追記します。