20210906のiOSに関する記事は7件です。

Swift - viewの影

swiftでviewに影をつける基本の四つのプロパティ simple.swift testView.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) testView.layer.shadowColor = UIColor.black.cgColor testView.layer.shadowOpacity = 0.6 testView.layer.shadowRadius = 4 影の方向 shadowOffset heightは縦方向です、正数は下、負数は上です。 simple.swift //影は下にある testView.layer.shadowOffset = CGSize(width: 0.0, height: 30.0) //影は上にある testView.layer.shadowOffset = CGSize(width: 0.0, height: -30.0) widthは横方向です、正数は右、負数は左です。 simple.swift //影は右にある testView.layer.shadowOffset = CGSize(width: 30.0, height: 0.0) //影は左にある testView.layer.shadowOffset = CGSize(width: -30.0, height: 0.0) 影の色 shadowColor simple.swift testView.layer.shadowColor = UIColor.blue.cgColor 影の透明度 shadowOpacity 範囲は0〜1です。0が透明、1が不透明です。 simple.swift testView.layer.shadowOpacity = 0.2 影の幅 shadowRadius simple.swift testView.layer.shadowRadius = 30.0 終わりに わかりやすいようにちょっと大げさな数値を入れましたので、自分のニーズで調整してください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【キャッチアップ】ios

reactnative, flatter等のクロスプラットフォームもあるものの、専用のswift的な知識も必要となるとのことだったので、swiftからキャッチアップ。 変数についている!・?マークについて !=nilの場合はエラーが発生する ?=nilの場合でもエラーが発生しない  こちらの記事に詳細が書いてありました。 https://qiita.com/og_omochi/items/0b255c790c4c3aecc630 this class is not key value coding-compliant for the keyエラーについて controllerのみから@IBOutletや@IBActionを削除すると発生します。 Show the Connections inspecterからも削除してやる必要があります。 こちらの記事に詳細が書いてありました。 https://qiita.com/Atsushi_/items/f7930dd00a2c2ea464cd つまづきポイントRedundant conformance of 'mapViewController' to protocol 'MKMapViewDelegate' classとextension両方に~Delegateを記載していると発生するので、classの方を削除すると解消する 【参考URL】
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

iOSで Qiita API v2 を叩いて自分の記事一覧を取得する

テスト投稿 iOSで Qiita API v2 を叩いて自分の記事一覧を取得する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

炭素排出量をiosアプリで計算する

人間は炭素でてきている 「水35L、炭素20㎏、アンモニア4L、石灰1.5㎏、リン800g、塩分250g、硝石100g、硫黄80g、フッ素7.5g、鉄5g、ケイ素3g、よし構築式を書くぞ。あとは魂の情報だ、、、」 エンジニアのみなさまにおかれましては常に真理の追及をしていると思いますが人体錬成をするさいにはリスクを考慮したいところです。いろいろと持ってかれる可能性があります。手とか足とか弟とか。 と、話を大きくそらしますが、先月から電通イノベーションスタジオ@サンフランシスコで働いています。案件が大量に降ってくるので忙しくて大変です。エンジニア仲間が欲しいのでこうやってネタ記事を書いてる次第です。 この記事が面白かったらGoodボタンとチャンネル登録とエントリーをお願いします! 脱炭素案件 仕事を始めてから案件を3つくらい並行して行っているのですが、その中の一つに脱炭素に関連したプロジェクトがあります。ここ数年で脱炭素という言葉をよく耳にするようになりました。SDGsと呼ばれることもあるようです。再生可能なんて言われることもあります(再生可能エネルギー)。人間が環境を破壊しすぎてしまったので再生可能、つまり自然を減らしすぎて人類が滅亡しないような防衛的な行動をしましょうということです。そのような流れの中で脱炭素という考え方も出てきました。 そしてこのような開発案件がIT界隈でも出るようになってきました。猫も杓子も脱炭素になる未来はありえない話ではないかもしれません。 脱炭素が流行りだしてから炭素排出量を計算するツールもいくつか作られ始めましたが、その一つにCarbon Interface があります。今回はこのCarbon Interface を使って車の走行距離から炭素排出量を算出するアプリを実装してみようと思います。計算に使用する車はトヨタのランドクルーザーにします。車の中でも炭素排出量が一番多そうなものを選択してみます。 余談ですが、ランクルは「生きて帰れる」という目的を達成するために作られた車です。炭素排出量は多いけども安全な車です。中東とか麻布とか六本木でよく売れています。危険な地域でも生きて帰れる安心な一台となっております。 Carbon Interface を使ってアプリ開発 大阪から東京までランクルで走ったときの炭素排出量を計算してみます。 アプリを作るにあたってのアクセスキーが必要になるのでそれを作ります。まずはアカウントを作成しましょう。 ポチポチするとアクセスキーがゲットできます。 今回はアプリのコードは割愛します。 2点を選択するとそこの距離を計算して、あとは Carbon Interface に車情報(ランクル)と距離をPOSTして炭素排出量を返してくれるアプリです。ちなみに東京から大阪までチャリンコをこぐと5日くらいかかります。1日100kmで合計500kmです。昔妻と走ったのはよい思い出です。ここでは直線距離で計算しているので375kmになっています。 炭素排出量144kg。これは大きいのでしょうか?自分の体重の倍以上はあるので大きいような気がします。 Carbon Interface API はとてもシンプルです。HTTPリクエストのヘッダにAPIキーを設定してjsonでパラメータを投げれば答えが返ってきます。 carbon_km が炭素排出量になります。 Carbon Interface API のドキュメントはこちらにあるのですが コマンドが間違ってるのでそのままでは動きません。 $ curl "https://www.carboninterface.com/api/v1/estimates" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -X POST -d '{"type": "vehicle", "distance_unit": "km", "distance_value": 100, "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559"}' 具体的には -d の後のjsonの記述をシングルクォーテーションでくくって放り投げてください。 iosで広く使われているAlamofireで書くとこのようなコードになります。 import Alamofire import SwiftyJSON class ServerAPI { static let serverUrl = "https://www.carboninterface.com/" static func makeApi(_ api: String) -> String { return String(format: "%@api/v1/%@", serverUrl, api) } static func vehicleCarbon(distanceKm: Double, resultFunc: @escaping (_ success: Bool, _ vehicleCarbon: VehicleCarbon?) -> ()) { let headers: HTTPHeaders = [ "Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXX", "Content-Type": "application/json", ] let parameters = [ "type": "vehicle", "distance_unit": "km", "distance_value": String(distanceKm), "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559", // らんくる //"vehicle_model_id": "e3772376-6d22-4353-8c3c-c55ff13a6eb0", // やりす ] let url = makeApi("estimates") AF.request( url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .validate(statusCode: 200..<300) .responseJSON { response in switch response.result { case .success(let value): let json = JSON(value) let vehicleCarbon = VehicleCarbon(json: json) if vehicleCarbon != nil { resultFunc(true, vehicleCarbon) } else { resultFunc(false, nil) } case .failure(let error): print(error) resultFunc(false, nil) } } } } しかし、ランクルの炭素排出量が144kg...よくわらないですね。 エコカーで再計算 炭素排出量が実感できないのでエコカーで比較してみることとします。日本でエコといえば軽自動車なのですがアメリカにないのでYaris(トヨタの旧アクア)で計算してみます。 62kg!まで減りました。 炭素排出量の今後 今回は炭素排出量を計算するだけで終わりますが、このあとにオフセットという炭素排出量を売買する仕組みがあります。炭素排出量を売買する株式市場のようなものがあると考えてみてください。暇があれば(だから忙しいんだって)そちらの記事も書いてみたいと思います。一気にお金のかほりがしてきます。 おわり 弊社ではエンジニア(以外も)を募集しております。とても大切な事なので本日2回目です!!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

iosアプリで車種と走行距離から炭素排出量を計算するプログラム

人間は炭素でてきている 「水35L、炭素20㎏、アンモニア4L、石灰1.5㎏、リン800g、塩分250g、硝石100g、硫黄80g、フッ素7.5g、鉄5g、ケイ素3g、よし構築式を書くぞ。あとは魂の情報だ、、、」 エンジニアのみなさまにおかれましては常に真理の追及をしていると思いますが人体錬成をするさいにはリスクを考慮したいところです。いろいろと持ってかれる可能性があります。手とか足とか弟とか。 と、話を大きくそらしますが、先月から電通イノベーションスタジオ@サンフランシスコで働いています。案件が大量に降ってくるので忙しくて大変です。エンジニア仲間が欲しいのでこうやってネタ記事を書いてる次第です。 この記事が面白かったらGoodボタンとチャンネル登録とエントリーをお願いします! 脱炭素案件 仕事を始めてから案件を3つくらい並行して行っているのですが、その中の一つに脱炭素に関連したプロジェクトがあります。ここ数年で脱炭素という言葉をよく耳にするようになりました。SDGsと呼ばれることもあるようです。再生可能なんて言われることもあります(再生可能エネルギー)。人間が環境を破壊しすぎてしまったので再生可能、つまり自然を減らしすぎて人類が滅亡しないような防衛的な行動をしましょうということです。そのような流れの中で脱炭素という考え方も出てきました。 そしてこのような開発案件がIT界隈でも出るようになってきました。猫も杓子も脱炭素になる未来はありえない話ではないかもしれません。 脱炭素が流行りだしてから炭素排出量を計算するツールもいくつか作られ始めましたが、その一つにCarbon Interface があります。今回はこのCarbon Interface を使って車の走行距離から炭素排出量を算出するアプリを実装してみようと思います。計算に使用する車はトヨタのランドクルーザーにします。車の中でも炭素排出量が一番多そうなものを選択してみます。 余談ですが、ランクルは「生きて帰れる」という目的を達成するために作られた車です。炭素排出量は多いけども安全な車です。中東とか麻布とか六本木でよく売れています。危険な地域でも生きて帰れる安心な一台となっております。 Carbon Interface を使ってアプリ開発 大阪から東京までランクルで走ったときの炭素排出量を計算してみます。 アプリを作るにあたってのアクセスキーが必要になるのでそれを作ります。まずはアカウントを作成しましょう。 ポチポチするとアクセスキーがゲットできます。 今回はアプリのコードは割愛します。 2点を選択するとそこの距離を計算して、あとは Carbon Interface に車情報(ランクル)と距離をPOSTして炭素排出量を返してくれるアプリです。ちなみに東京から大阪までチャリンコをこぐと5日くらいかかります。1日100kmで合計500kmです。昔妻と走ったのはよい思い出です。ここでは直線距離で計算しているので375kmになっています。 炭素排出量144kg。これは大きいのでしょうか?自分の体重の倍以上はあるので大きいような気がします。 Carbon Interface API はとてもシンプルです。HTTPリクエストのヘッダにAPIキーを設定してjsonでパラメータを投げれば答えが返ってきます。 carbon_km が炭素排出量になります。 Carbon Interface API のドキュメントはこちらにあるのですが コマンドが間違ってるのでそのままでは動きません。 $ curl "https://www.carboninterface.com/api/v1/estimates" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -X POST -d '{"type": "vehicle", "distance_unit": "km", "distance_value": 100, "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559"}' 具体的には -d の後のjsonの記述をシングルクォーテーションでくくって放り投げてください。 iosで広く使われているAlamofireで書くとこのようなコードになります。 import Alamofire import SwiftyJSON class ServerAPI { static let serverUrl = "https://www.carboninterface.com/" static func makeApi(_ api: String) -> String { return String(format: "%@api/v1/%@", serverUrl, api) } static func vehicleCarbon(distanceKm: Double, resultFunc: @escaping (_ success: Bool, _ vehicleCarbon: VehicleCarbon?) -> ()) { let headers: HTTPHeaders = [ "Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXX", "Content-Type": "application/json", ] let parameters = [ "type": "vehicle", "distance_unit": "km", "distance_value": String(distanceKm), "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559", // らんくる //"vehicle_model_id": "e3772376-6d22-4353-8c3c-c55ff13a6eb0", // やりす ] let url = makeApi("estimates") AF.request( url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .validate(statusCode: 200..<300) .responseJSON { response in switch response.result { case .success(let value): let json = JSON(value) let vehicleCarbon = VehicleCarbon(json: json) if vehicleCarbon != nil { resultFunc(true, vehicleCarbon) } else { resultFunc(false, nil) } case .failure(let error): print(error) resultFunc(false, nil) } } } } しかし、ランクルの炭素排出量が144kg...よくわらないですね。 エコカーで再計算 炭素排出量が実感できないのでエコカーで比較してみることとします。日本でエコといえば軽自動車なのですがアメリカにないのでYaris(トヨタの旧アクア)で計算してみます。 62kg!まで減りました。 炭素排出量の今後 今回は炭素排出量を計算するだけで終わりますが、このあとにオフセットという炭素排出量を売買する仕組みがあります。炭素排出量を売買する株式市場のようなものがあると考えてみてください。暇があれば(だから忙しいんだって)そちらの記事も書いてみたいと思います。一気にお金のかほりがしてきます。 おわり 弊社ではエンジニア(以外も)を募集しております。とても大切な事なので本日2回目です!!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

低炭素プログラミング

人間は炭素でてきている 「水35L、炭素20㎏、アンモニア4L、石灰1.5㎏、リン800g、塩分250g、硝石100g、硫黄80g、フッ素7.5g、鉄5g、ケイ素3g、よし構築式を書くぞ。あとは魂の情報だ、、、」 エンジニアのみなさまにおかれましては常に真理の追及をしていると思いますが人体錬成をするさいにはリスクを考慮したいところです。いろいろと持ってかれる可能性があります。手とか足とか弟とか。 と、話を大きくそらしますが、先月から電通イノベーションスタジオ@サンフランシスコで働いています。案件が大量に降ってくるので忙しくて大変です。エンジニア仲間が欲しいのでこうやってネタ記事を書いてる次第です。 この記事が面白かったらGoodボタンとチャンネル登録とエントリーをお願いします! 脱炭素案件 仕事を始めてから案件を3つくらい並行して行っているのですが、その中の一つに脱炭素に関連したプロジェクトがあります。ここ数年で脱炭素という言葉をよく耳にするようになりました。SDGsと呼ばれることもあるようです。再生可能なんて言われることもあります(再生可能エネルギー)。人間が環境を破壊しすぎてしまったので再生可能、つまり自然を減らしすぎて人類が滅亡しないような防衛的な行動をしましょうということです。そのような流れの中で脱炭素という考え方も出てきました。 そしてこのような開発案件がIT界隈でも出るようになってきました。猫も杓子も脱炭素になる未来はありえない話ではないかもしれません。 脱炭素が流行りだしてから炭素排出量を計算するツールもいくつか作られ始めましたが、その一つにCarbon Interface があります。今回はこのCarbon Interface を使って車の走行距離から炭素排出量を算出するアプリを実装してみようと思います。計算に使用する車はトヨタのランドクルーザーにします。車の中でも炭素排出量が一番多そうなものを選択してみます。 余談ですが、ランクルは「生きて帰れる」という目的を達成するために作られた車です。炭素排出量は多いけども安全な車です。中東とか麻布とか六本木でよく売れています。危険な地域でも生きて帰れる安心な一台となっております。 Carbon Interface を使ってアプリ開発 大阪から東京までランクルで走ったときの炭素排出量を計算してみます。 アプリを作るにあたってのアクセスキーが必要になるのでそれを作ります。まずはアカウントを作成しましょう。 ポチポチするとアクセスキーがゲットできます。 今回はアプリのコードは割愛します。 2点を選択するとそこの距離を計算して、あとは Carbon Interface に車情報(ランクル)と距離をPOSTして炭素排出量を返してくれるアプリです。ちなみに東京から大阪までチャリンコをこぐと5日くらいかかります。1日100kmで合計500kmです。昔妻と走ったのはよい思い出です。ここでは直線距離で計算しているので375kmになっています。 炭素排出量144kg。これは大きいのでしょうか?自分の体重の倍以上はあるので大きいような気がします。 Carbon Interface API はとてもシンプルです。HTTPリクエストのヘッダにAPIキーを設定してjsonでパラメータを投げれば答えが返ってきます。 carbon_km が炭素排出量になります。 Carbon Interface API のドキュメントはこちらにあるのですが コマンドが間違ってるのでそのままでは動きません。 $ curl "https://www.carboninterface.com/api/v1/estimates" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -X POST -d '{"type": "vehicle", "distance_unit": "km", "distance_value": 100, "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559"}' 具体的には -d の後のjsonの記述をシングルクォーテーションでくくって放り投げてください。 iosで広く使われているAlamofireで書くとこのようなコードになります。 import Alamofire import SwiftyJSON class ServerAPI { static let serverUrl = "https://www.carboninterface.com/" static func makeApi(_ api: String) -> String { return String(format: "%@api/v1/%@", serverUrl, api) } static func vehicleCarbon(distanceKm: Double, resultFunc: @escaping (_ success: Bool, _ vehicleCarbon: VehicleCarbon?) -> ()) { let headers: HTTPHeaders = [ "Authorization": "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXX", "Content-Type": "application/json", ] let parameters = [ "type": "vehicle", "distance_unit": "km", "distance_value": String(distanceKm), "vehicle_model_id": "2f990135-5d9d-4a68-802e-c24fa397f559", // らんくる //"vehicle_model_id": "e3772376-6d22-4353-8c3c-c55ff13a6eb0", // やりす ] let url = makeApi("estimates") AF.request( url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .validate(statusCode: 200..<300) .responseJSON { response in switch response.result { case .success(let value): let json = JSON(value) let vehicleCarbon = VehicleCarbon(json: json) if vehicleCarbon != nil { resultFunc(true, vehicleCarbon) } else { resultFunc(false, nil) } case .failure(let error): print(error) resultFunc(false, nil) } } } } しかし、ランクルの炭素排出量が144kg...よくわらないですね。 エコカーで再計算 炭素排出量が実感できないのでエコカーで比較してみることとします。日本でエコといえば軽自動車なのですがアメリカにないのでYaris(トヨタの旧アクア)で計算してみます。 62kg!まで減りました。 炭素排出量の今後 今回は炭素排出量を計算するだけで終わりますが、このあとにオフセットという炭素排出量を売買する仕組みがあります。炭素排出量を売買する株式市場のようなものがあると考えてみてください。暇があれば(だから忙しいんだって)そちらの記事も書いてみたいと思います。一気にお金のかほりがしてきます。 おわり 弊社ではエンジニア(以外も)を募集しております。とても大切な事なので本日2回目です!!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者向け】ディープリンク技術の概要と注意点

チーム内で「ディープリンク」「ダイナミックリンク」「ユニバーサルリンク」等の用語の認識が合っているのか怪しかったので、整理してみました。 基本iOS目線で書いてますが、実装寄りではなく概念寄りの内容なので、Android開発者でも読めると思います。 私の認識違いなどがありましたら、コメント欄にてご教示いただけますと幸いです。 ※この記事ではURL/URIの区別を厳密に意識せず、より馴染み深い"URL"に統一して記述しています。 ディープリンク (Deep Link) とは 任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称であり、概念を表す用語です。 スマホアプリで代表的なユースケースは以下のとおりです。 スマホのブラウザでWebコンテンツ内のリンクをtapした際に、AアプリのX画面に遷移させる。 Aアプリのボタンをtapした際に、BアプリのY画面に遷移させる。 ディープリンクを実現する仕組み カスタムURLスキーム URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。 http/https, ftp, mailto などなどが既定のURLスキームです。 アプリ独自で決めたURLスキームをカスタムURLスキームと呼びます。myapp://hoge/fuga のようなURLになります。 アプリでの設定/実装によって、カスタムURLスキームによるディープリンクを実現できます。 iOS/Androidでの実装方法については素晴らしい記事が他にたくさんあるので、他に譲ります。 カスタムURLスキームの弱点と注意点 「アプリがインストールされていない場合に○○する」という要件を満たすことが困難です。 誰かが管理しているわけではないので、他のアプリとスキームが競合する可能性があります。 端末内に同じカスタムURLスキームを持つアプリが複数インストールされている場合、 Androidの場合、どのアプリを起動するかを選択するためのダイアログが表示されます。 iOSの場合、バージョンによって違いがあるようですが先/後にインストールしたアプリが勝手に起動されます。 したがって「ユーザーが気づかないうちに意図に反した挙動をしてしまう可能性がある」という弱点があり、それを狙った攻撃を「URLスキーム・ハイジャック」と呼びます。 URLスキーム・ハイジャックの事例解説記事: iOS ユニバーサルリンク (Universal Links) 見た目は"https"で始まる単なるWebページのようなURLです。 iOS端末でユニバーサルリンクにアクセスすると、ターゲットのアプリがインストールされている場合は起動しますし、インストールされていない場合は任意のWebページを表示してくれます。 この機能を使う前提作業として、関連づけファイル (apple-app-site-association/AASA) をWebサーバーに配置します。 「このドメイン・パスのURLリンクはこのアプリと関連づきますよ」という定義をするためのファイルです。 したがってAASAは、独自ドメインの、自前のWebサーバーに配置する必要があり、AASAにはアプリを一意にするBundle IDなどを設定します。 その他にアプリ側の対応(プロビジョニング・プロファイルとXcodeの設定、ハンドリングの実装)も必要です。 以上の設定と実装によって、iOS端末と、AASAを配置したWebサーバーとの間で内部的に連携して、URLリンクにアクセスした際に連携するべきアプリが決定されます。 公式ドキュメント: 参考リンク: Android アプリリンク (App Links) ユニバーサルリンクと同様の概念・機能ですので詳細は割愛します。 公式ドキュメント: Firebase Dynamic Links ユニバーサルリンク/アプリリンクは、カスタムURLスキームの弱点を解消した強力な仕組みではありますが、「自前のドメインとWebサーバーを用意し、OSごとに異なる"仕込み"を行う必要がある」というデメリットがあります。 Firebase DynamicLinksはその手間を解消することを主目的とし、 関連づけファイルを配置するWebサーバーをホスティングしてくれる Dynamic Links既定の https://{任意のサブドメイン}.page.link というドメインで使える、または独自ドメインも指定可能 関連づけファイルの設定をコンソール上から行える というサービスです。 さらに「どこから流入してアプリをインストールしたか」といった解析サービスも付いています。 公式ドキュメント:
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む