STUDiO405

趣味のスノーボードやSK8、キャンプ、山登り、iOSアプリ開発関連のブログになる予定

UIApplicationOpenSettingsURLStringが使えない?

 
現在、Objective-Cで書かれている自作アプリをSwiftに移植しています。
その中でアプリ内で設定アプリ内の自アプリ用の設定画面へ遷移するメソッドを移植して稼動確認すると以下のメッセージが表示されて開きません。
 

canOpenURL: failed for URL: "UIApplicationOpenSettingsURLString:" - error: "This app is not allowed to query for scheme uiapplicationopensettingsurlstring"

 
環境
Xcode 8.3.3
Swift 3.1
macOS Sierra 10.12.6
iOS 10.0、10.3.1
 
該当のコードは以下

    func showPermission() -> Void {
        guard let settingsUrl = URL(string: "UIApplicationOpenSettingsURLString:") else {
            return
        }
        if UIApplication.shared.canOpenURL(settingsUrl) {
            UIApplication.shared.open(settingsUrl, options: ["":""], completionHandler: nil)
        }
    }

 
ちなみにUIApplicationクラスで定義されている定数です。調べたわかったのですが、値は"app-settings:"です。
 
Appleのリファレンス
https://developer.apple.com/documentation/uikit/uiapplicationopensettingsurlstring
 
移植中のアプリはDevelopment Targetを10.0にしてAPIもiSO10以降のものに変更してしまったのでこのアプリではiO9以前で検証はできないため、Objective-Cで書かれている別アプリで確認してみました。
 
Objective-Cのコード

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];

 
結果は動きました。。。はて???
ググってみてもSwift3でUIApplicationOpenSettingsURLString動いているっぽい。。。謎。
iOS10.2.1での記事もあったので10.0でも動かないのはよくわからない・・・
で、調査の途中で定数の値を知ったのでそっちに変えたところ、あっさり動きました。。。
一応コード載せておきます。

    func showPermission() -> Void {
        guard let settingsUrl = URL(string: "app-settings:") else {  // 引数を変更
            return
        }
        if UIApplication.shared.canOpenURL(settingsUrl) {
            UIApplication.shared.open(settingsUrl, options: ["":""], completionHandler: nil)
        }
    }

 
自分の環境はUIApplicationOpenSettingsURLStringの定数がなくなった?
何が原因なんでしょか?
エラーメッセージだと「このアプリは"UIApplicationOpenSettingsURLString"のURLスキームが許可されていない」と言ってます。
Info.plistの別件で登録済みのLSApplicationQueriesSchemesにこの定数を登録して再度実行してもエラーのままでした。
取り敢えず上記のコードで行くことにしました。
 
何だろうなぁ。気持ちが悪い。同じこと言ってる人いないし。
教えてエロい人!!
 
 
追記
SNSでお友達が指摘してくれました。
定数なのに""で括ってたからでした!
何と!初歩的ミス!!!
 
 
(´・ω・`).;:…(´・ω...:.;::..(´・;::: .:.;: サラサラ..
 

関数の引数に関数を渡す時の構文について

Swift勉強中によく分からなかったので調べてみました。

写経して分からなかったのは以下のサイトに記載の例文。
Swift実践入門 〜 今からはじめるiOSアプリ開発! 基本文法を押さえて、簡単な電卓を作ってみよう - エンジニアHub|若手Webエンジニアのキャリアを考える!

func numbersMap(list: [Int], condition: (Int) -> Int) -> [Int] {
var numbers: [Int] = []
for item in list {
numbers.append( condition(item) )
}
return numbers
}

var items: [Int] = [1, 2, 3, 4, 5]
numbersMap(list: items, condition: { (number: Int) -> Int in number * 2 })

これの引数conditionの { (number: Int) -> Int in number * 2 }の中のin句以降。
ググっても分からず、手持ちの詳解Swiftを調べてみた。

詳解 Swift 改訂版

詳解 Swift 改訂版

こちらは古いので以下のものが最新版です。

関数のとこ見ても書いてない。。。
でもなんか見たことあるなぁと思い、目次を見てたらクロージャって単語が。
これかも?と見たら( ゚д゚)ビンゴーでした。

inの後は実行文とのこと。
Objective-Cの頃からクロージャが理解できず苦手だったので全く見当もつかなかったです(´・ω・`)

上記の例文だと
{ (引数名 : 型) -> 戻り値の型 in 実行文 }
ということになります。
今回の例文だと引数numberの値を2倍にするという無名関数ということになります。*1
 
はースッキリ。
しかし前回勉強してから数ヶ月とかざらにあるのでなかなか覚えられない。
そろそろSwift覚えなきゃと思いつつ他の趣味とか仕事が忙しかったりで進んでないのはもうダメでしょ。
ということで自作アプリをSwiftで書き換える作業をしながら覚えることにしました。
もう手を動かして苦労しないと覚えられん。。。
 
 
本題はここまで。
以下、告知とか雑文です。
 
GW中に自作アプリのアップデート版のメインの実装を終え、週末にちょっとずつ改善を進めていったアプリがリリースされました!

Remaining

Remaining

  • STUDiO405
  • 仕事効率化
  • ¥120
今回の目玉は月単位でしかやりたいことの進捗を管理できなかったんですが、日/週/月/任意の間隔/指定期日までのパターンで管理できるようになりました!!
ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ
 
 
話はまた変わって先日、自分がギターを始めるきっかけとなったBOØWYのライブアルバムが発売され早速ゲットしました。
当時はVHSで見てたんですが、布袋氏のカッコ良いステージングを見てこれはやるしかない!!とギターを買い、バンドやってるクラスメイトやそのバンドメンバーに教えてもらったりしてな思い出が。
懐かしいなぁ。。。
でも今では弾く回数激減なので腕は上がってません。
人前ではまだ弾くのが恥ずかしいです(;・∀・)

"GIGS" CASE OF BOφWY -THE ORIGINAL-(完全限定盤)(4CD+Tシャツ+ステッカー)

*1:追記 上記のサイトの次のとこに書いてありました...よく読んでからブログ書けよ>俺 まぁ備忘録だからいいよねw

CocoaPodsで導入したライブラリの更新有無の確認方法

Qiitaで先に記事書いちゃったので転載ですw


自作アプリでCocoaPodsでいくつかライブラリを導入しているのですが、いちいち各ライブラリの更新を確認するのめんどくさいなぁと思ってググってみました。


やはりありました。先人のおかげで助かりますです。
検索結果で最初に目に入ったのはQiitaの記事でした。


こちらの記事です。
qiita.com


これでめんどくさいことやらずに済んだ!と喜び勇んで記事に記載されていたにコマンドを実行しました。
少し待っていると...
ログをいっぱい吐き出して終了。
ログの内容を見たら、エラーメッセージっぽいのが目に留まったのでよく見てみると...


以下のようなメッセージが何回か出力されてました。
LoadError - cannot load such file -- nanaimo


どうやら「nanaimo」ってファイルが読み込めないようです。
またグーグル先生に問い合わせです。
検索は「pod outdated cannot load such file nanamio」でやってみました。


するとCocoaPodsのIssuesのページが最初にヒットしたので中を読んでみました。
まずは「nanaimo」をインストールしてみました。


以下のコマンドを実行
sudo gem install nanaimo


処理終了後にまた確認コマンドを実行しました。
が、またもや同じエラーが...


先ほどのCocoaPodsのIssuesの続きから最後まで読みました
結果、一番最後のコメントにあったコマンド全て実行ののち、確認コマンドを実行したらうまくいきました!
(お恥ずかしい最後まで読んでませんでした:(;゙゚'ω゚'):ダメですね)
該当のコメント
github.com


一応そのコマンド実行のログ置いときますね。

sudo gem uninstall nanaimo

You have requested to uninstall the gem:
nanaimo-0.2.3

xcodeproj-1.4.1 depends on nanaimo (~> 0.2.0)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN] y
Successfully uninstalled nanaimo-0.2.3

sudo gem install nanaimo
Fetching: nanaimo-0.2.3.gem (100%)
Successfully installed nanaimo-0.2.3
Parsing documentation for nanaimo-0.2.3
Installing ri documentation for nanaimo-0.2.3
1 gem installed

pod install -> enjoy
pod outdated


以上です。

ジョギングのお供にポケモンGoでどうなった?

今までよりも少しは長い距離走れるんじゃないのか?と軽いノリというか、
ポケモンGoをやりたいのでNike+と一緒に起動して今朝走ってきました。


走り始めで近所にポケストップを見つけてしまい。
1km以内で3回、その後数km以内で2回ほどポケモンGoを起動。
最後の方で住宅街を走ったので数回起動。


懸念してたことが現実に。
全くジョギングに集中できないw
ポケストップありそうな公園などのランドマークあれば止まって確認しちゃうし、
バイブなったらポケモンハントだしw
リズム乱れる。。。


それから先はポケストップがジョギングコース上にほぼなし。
川と田んぼばかりの田舎ですから。
おかげでジョギングがはかどりましたけどw


しかし、ポケモンGoがやりたくて仕方がない状態で家を出てしまい、忘れ物をしてしまいました。
ジョギングのお供にイヤフォンで走行時間、距離、ペースを1km毎にNike+から情報を得ていたんですが、
いちいちiPhoneをバッグから取り出して確認するのは面倒です。
(ポケモンGoは例外ですw)
このため情報が得られずにいつもより早いペースで走ってしまいました。
ポケストップ途中全然ないですしw
落ち着いて行動しないとダメですねw


なんやかんや言ってますけど、そこそこのペースで16km走ってきました。
最後は疲労と若干の痛みでペース落ちましたけど。

最後にクリーダウンと称して歩きで近所のポケストップを2ヶ所回って終了。


ジョギングに集中したいならダメですねw
あと住んでる場所は田舎なのでポケストップ少ないです。
Ingressをちょっとの間やってたんですけど、ポータルとポケストップの場所が知ってる範囲では完全一致してますね。


帰ってきたあとは、車検から戻ってきた車をゲットしに嫁とディーラーへ。
嫁もニュースなどで気になってたみたいで、自分もやってるのもありインストールしてました。
行く途中、ピカチューのゲットの方法やポケストップやモンスターボールのことなどを教えながら歩いて行きました。
車を受け取った後も買い物しながら途中でポケストップに寄ったりして夫婦で楽しんでましたねw
しかし、寄り道が多くなるので生鮮食品購入後はお勧めできませんw


午後もポケモンハントしようかなw
Ingressよりわかりやすいので楽しいです。そのうち飽きると思いますけどw
外ではポケモンGo、家ではウイクラで久々のゲーム三昧ですw
あぁ、ニートになりたいw

Pokémon GO

Pokémon GO

Nike+ Running

Nike+ Running

  • Nike, Inc.
  • ヘルスケア/フィットネス
  • 無料

今更ながらiPad Air2を購入しました


以前は用途が全く思いつかず、タブレットiPhone用アプリ作った時に実機確認のためだけにあればいいかなぁと思ってました。その用途だとお金出してまではいらんなと。


最近、妻がクックパッドとか見れたらいいなぁとか自分がKindle本買ってiPhone6 Plusだと読みにくいと思い、購入と決意しました。6月末まで24回払いなら金利無料ですし。
ということで、購入と成りました。


先週末に意思を決めてポチッと!
ショッピンローンに提携のOricoで申し込みとなったんですが、
確認メールが来たので内容を見ただけでSafariを閉じました。

これが原因で1週間経ってもローンの審査中のまま。。。
おかしいと思い、ググってみたらこんな記事を見つけて...
と確認したらドメイン失効されたようで記事が見えれませんw

説明するとメールにあった確認リンク先でボタンがあったのですが、
それを押さないとローン申込みが完了しないようでした。

今は見れない記事と同じように金曜の夜に対処したらすぐに無事審査が通りました。
サイトの内容を最後まで見ないとダメっすね(;・∀・)


審査完了後、すぐに出荷手続きとなったようで日曜の午前中にiPadが到着。
初めて整備品を購入したんんですが、パッケージが新品と違うんですね。
(冒頭の写真参照)
まぁ気にならないですけど。5千円くらい安いですし。


あ、購入したのはiPad Air2 WiFi 64GBモデルです。
Celluarモデル買って格安SIM刺そうかなと思ってたんですが、
あんまり通信しないだろうなぁと思いWiFiモデルに変更しました。


店頭では持ったことあるんですが、常に充電&盗難防止でケーブルがついてて
正確な重さを体験できませんでした。
今回持ってみて感じたことはやっぱ軽くないw
長時間持つのは厳しいですねぇ。
正直iPad mini2、mini4と検討してたんですが、
座って使う機会がほとんどなので大きい方がいいかとAir2になりました。


自分の用途は主にKindleで読書、妻はクックパッド、
子どもはあんま触らせないにしようかなw
Kindleアプリ起動して開発本とかマンガ少し見ましたが、見やすいですね!
全然使ってなかったアプリの大辞林も使いそうです。
ま、iPhoneと比べてはいけないんですが。
これだけで今の所満足です。


あとケースとかフィルムまだ買ってないのでこれから検討しないと。
何がいいかなー?
純正ケースは安くないし(一緒に購入すれば良かったと思ったのは内緒)、
あんまり安いとすぐダメになりそうだし。さてどうしよ?
純正以外でオススメあれば教えてくださ〜い!

詳解 Swift 改訂版(Kindle版)を購入しました

久々に開発本購入しました。今回はタイトル通り詳解 Swift 改訂版です。
(注) 本記事は書籍レビューではありません。


スノーシーズンも終了し、ようやっとアプリ開発へのモチベーションが少し上がってきたのでSwiftの勉強を再開しました。
最初はネットで見つけたAppleSwiftチュートリアルを翻訳してたサイトを見ながらPlaygroundでコードを写経しながら。

しかし、ところどころ読んでも意味がわからない、例題出されてコンパイルエラー出てどうやってやるのか分からないなど出てきました。
やはり文法を理解するのに本買った方がいいと考え、以下の2つに絞りました。

詳解 Swift 改訂版

詳解 Swift 改訂版

Swift 2標準ガイドブック 【Swift 2.1対応版】

Swift 2標準ガイドブック 【Swift 2.1対応版】

詳解 Swiftの著者の萩原氏が書いた詳解 Objective-C 2.0を読んだことがあリました。
その時はまだiOSアプリ開発もオブジェクト指向プログラミングも分かっていない状態で読んでいたので、途中からよく眠くなる本という認識がありました(;・∀・)


どっちにしようかなぁとSNSで背中を押してもらうためにつぶやいていたら萩原本を推薦されたのとブログでのレビュー、Amazonのレビューを見て詳解 Swift 改訂版のKindle版をポチりました。


まだ読み終わってないのですが、今までの経験もあるのか詳解 Objective-C 2.0の時よりは頭に入っていきます。ここのところ???となることも出てきましたが、何度か読み直せばいいかなぁと。


それと写経で何かサンプルコード打ちまくって改造しても並行してやったほうがいいなと最近思い始めました。
コード打って、本読み返すと理解が深まることもありそうですし。
何かオススメのサンプルソースありますかね?
本家のサンプルコード写経しようかな?
GitHubで公開しているライブラリ見るのもいいかも。



で、AmazonAmazon.co.jp: 【半額】春のプログラミング入門書フェア(4/28まで): Kindleストア
をやってたので悩みに悩んでこれを買いました。しかも今朝w
記事書いている時点でもまだ半額でした。いつ終わるの?w

Code Complete 第2版 上 完全なプログラミングを目指して

Code Complete 第2版 上 完全なプログラミングを目指して

GW中は詳解SwiftとCode Completeを読もうと思います。
Code Completeの下巻は今度セールやったときにでも。。。
おこづかい制だし、今月のカードの引き落とし多いし。。。orz


あと既存のiOSアプリをSwiftで書き換え&アップデートしようと検討してます。
お仕事でiOSアプリやってるわけではないので遅々として進まない可能性ありですが。
いつか仕事でやる機会出てくるんだろうか。。。?
今の会社じゃないだろうなぁ。。。
転職は年齢的にアレだし。。。

2016 Season Day 7 裏磐梯猫魔スキー場 2016.03.26

f:id:singo405:20160326102540j:plain
いつものように家族と行ってきました。
暖冬だしSK8熱高まってるので今回で滑り納めかもなぁと思いながら滑ってきました。

着いたら雪が舞ってました。気温が低かったようで雪面はそこそこ硬め。
場所によってはいい音してました。ガリガリ。

午前中は家族と一緒にフリーラン。
家族にオーリーやテールマニュアル、ノーズプレスを教えて、アドバイスして。
子どもはまた上達してました。オーリーが割と出来てる。
嫁はオーリーはまだ出来ず両足ジャンプ。ぴょこん!
それを見てた子どもはドヤ顔でこうやるんだよ!ってお手本見せてましたw
調子乗りすぎw
f:id:singo405:20160326101725j:plain
グラトリしてると暑い。。。
お昼頃は太陽が顔を出し、一挙に春モードへ。。。
日陰は硬かったですけど。


午後は家族と別れパークへ。
初心者向けの3連キッカーとBOXで練習。
最初のうちはヒールに乗りそうで怖かったですけど、徐々に慣れてきたところで疲労感があったのでやめました。もっと練習したかったけど。
家族と合流し、1本一緒に滑って家族は終了。
自分は2本滑って終了しました。
シーズン終了か確定してないけど、お疲れ山でした!
f:id:singo405:20160326112210j:plain


でも滑るとやっぱまた滑りに行きたくなります。
4月どうしようかなぁ。9日以降でないと行けないからヒトリストの場合は群馬かな。
たんばら、丸沼、天神平のうちどれかですかね。
一緒に行く人が数人いれば相乗りできるから福島でも新潟でも行けるけど誰かいるかな?
 

SnowTracks

SnowTracks

  • STUDiO405
  • スポーツ
  • 無料