iOSアプリ開発4日目〜その2〜
ここでは、Web API(Webサービス)を使ったアプリを作ることが出来るようになるため、日の出アプリ作成の続きをまとめる。
ユーザーが都市名を入力し、「日の出時刻を調べる!」ボタンをクリックすると、天気予報を提供しているサーバにアクセスして、それを表示する機能を実装していく。
前回の記事では、UIパーツを配置し、それぞれのパーツをプログラムに連携させるところまで行った。
1.実装(UIパーツにコードを追加する)
それぞれのUIパーツに対して、処理をおこなうためのコードを書いていく。
使用するAPI(Application Programming Interface)は、Yahoo Weather API for your appsである。
利用しようとHPを見たら、以下のような警告文
Important EOL Notice: As of Thursday, Jan. 3, 2019, the weather.yahooapis.com and query.yahooapis.com for Yahoo Weather API will be retired.
To continue using our free Yahoo Weather APIs, use https://weather-ydn-yql.media.yahoo.com/forecastrss. Follow below instructions to get credentials and onboard to this free Yahoo Weather API service.
Google翻訳によると
EOLの重要なお知らせ:2019年1月3日木曜日に、Yahoo Weather APIのweather.yahooapis.comとquery.yahooapis.comは廃止されます。
無料のYahoo Weather APIを引き続き使用するには、https://weather-ydn-yql.media.yahoo.com/forecastrssを使用してください。以下の手順に従って、資格情報を取得し、この無料のYahoo Weather APIサービスにオンボードしてください。
ふむふむ、昨年でAPIの利用方法が変わったようだ。ここで私がとれる選択肢は2つ。
1つ、米Yahoo Weather APIを使用するために資格情報を取得をする
2つ、Yahoo! JAPANが提供しているAPIを使う
今回は2をチョイスして進めようとしたが、データの取得ができない。(半日調べたがよくわからない)
仕方ないので講義だけ聞いてAPI実装の概要をつかんでいく。
Web APIをiOSアプリで使うための流れは、このようになっている。
①外部通信を許可(info.plist)
②HTTPリクエストを生成(ViewController.swift) ← ×
③JSONデータを取得(ViewController.swift)
外部通信の許可方法をまとめる
ナビゲータエリアから「info.plist」を選択
丸印の部分で「App Transport Security Settings」を選択し、+マークをクリック
「Allow Arbitrary Loads」を追加してあげる
もし講座が更新されるかAPIの取得方法がわかったら、こちらに追記していく。
2.AutoLayoutを設定する
目的:さまざまなiOSデバイスでアプリを実行しても、レイアウトが崩れないようにする
コンストレインズ(画面の制約)を追加する
まず、Main.storybordを選択し、ビューを表示する。
①都市名を入力するテキストフィールド「cityNameInput」を選択し、下にあるPINをクリックする。上と左右のマージンを指定して、Add 3 Constrainsで変更を確定する。
②日の出時刻を表示するラベル「sunriseTimeLavel」を選択し、上マージンを100と指定する。
③処理を実行するボタン「findSunrise」を選択し、Alignで相対的なマージンを設定する。Horizontally in ContainerとVertically in Containerにチェックを入れる。
おまけ
iOS 11から、「上からマージン指定する機能が廃止になります」というエラーが出てくる場合があるので、それに対応する。
Main.storyboardから、「Constraints」を選択。
「City Name Input.top」を選択し、ユーティリティーエリアから、Interface Builder DocumentのUse Safe Area Layout Guidesにチェックを入れる
うーん、不完全燃焼だが、ゴールデンウィークもあと2日しか残っていないので、次に進んでいく。