はじめに
iOS11よりTwitter、Facebook、Flickr、Vimeoアプリのサインイン連携がセキュリティの観点からできなくなりました。
他のサードパーティーアプリと同様の扱いになりました。
アプリでTwitterシェアやFacebookシェアなどをSLComposeViewControllerで実装している場合に挙動が変わります。
ios11のGM版(製品リリース手前)で確認するとアプリがインストールしてあってもFacebook,Twitterのシェアボタンが機能しません。
→GM版のバグな可能性が高いため、正式リリース(9/19)したら改めて動作確認すると良いと思います。
Social accounts have been removed from Settings iOS 11. Third-party apps no longer have access to those signed-in accounts,
appleinsider参考リンク
http://appleinsider.com/articles/17/06/05/apple-drops-twitter-facebook-flickr-vimeo-integration-in-ios-11
SLComposeViewControllerで実装した場合の挙動の違いについて
Twitter,Facebookなどのアプリがインストールされている場合はSLComposeViewControllerの実装のままで問題なく動作するはずです。
→ベータ版、GM版では動いていないので不安
いずれにせよSLComposeViewControllerは推奨されていないため、移行対応を行ったほうが間違いありません。
https://stackoverflow.com/questions/45450300/twitter-sharing-in-ios-11
アプリをインストールしていない場合にシェアが連携できないためできなくなります。
特に実装アプリで処理を入れていない場合は、ボタンを押しても無反応になります。
(アプリをインストールしていないユーザは少ないので特に無視でも問題ないかもしれませんが、ストアに誘導など入れると親切です)
対応方法について
Twitter,Facebookの対応についてのみ記載します。
基本的には公式の各SDKを利用して行えば問題ありません。
(またはWebのSafariなどに認証を投げてシェアさせる方法もできます)
Twitter対応方法
公式で移行手順についてアナウンスしています。
TwitterKit3を使ってくださいとのことです。
https://dev.twitter.com/twitterkit/ios/migrate-social-framework
Facebook対応方法
公式ページよりFacebookSDKでシェアを実装してください。
https://developers.facebook.com/docs/ios/getting-started?locale=ja_JP
はじめに
iPhone発売10周年のApple Special Eventが日本時間9月13日午前2時から開催されました。
主な発表内容をメモします。
iOS11について
iOS11を9月19日にリリースすると発表しました
http://www.techradar.com/news/ios-11-release-date-news-and-features
発表内容
http://www.techradar.com/news/ios-11-release-date-news-and-features
iOS開発者に関係する発表について
もともと発表されていたiOS11に関すること以外はありませんでした。
ios11の開発側の対応については過去記事を参考ください。
http://to-developer.com/blog/?p=2539
iPhone8/8 Plus発表
予約注文は9月15日から9月22日発売です。
(iPhone8が4.7インチ、iPhone8 Plusが5.5インチ)
ARkitで開発したAR(拡張現実)アプリが対応しています。
スペックなど詳細は公式ページを参照
https://www.apple.com/jp/iphone-8/
iPhone x発表
予約注文は10月27日から 11月3日発売です
(iPhone xは5.7インチ)
スペックなど詳細は公式ページを参照
https://www.apple.com/jp/iphone-x/
物理ホームボタンの廃止
iPhone xより物理ボタンがなくなりディスプレイ化します。iphone7も同様ですがタップは指に振動で伝わるため、ボタンを押した感はあるようです。
OLED(有機エレクトロルミネッセンス)ディスプレイで画面全体がディスプレイ化
端末全体がディスプレイになりました。
OLEDは電流を流すと発光する仕組みを使ったものでバックライトなどが不要になり、薄型に貢献するものです。
これにより画面をiphoneの縁まで使うことができ、端末サイズをあげずにディスプレイサイズを大きくすることができるそうです。
韓国のサムスンやLGエレクトロンはOLED搭載スマホが既に出ています。
OLEDのメリット・デメリットについて
http://securitysoft.asia/oled/smartphone/merit-demerit.php
顔認識(FaceID)でロック解除
全面のフロントカメラでFaceIDに対応し端末のロック解除ができるようになります。
AppleWatch Seriese3発表
https://www.apple.com/jp/watch/
注文は9月15日から 9月22日発売
スペックなど詳細は公式ページを参照
https://www.apple.com/jp/watch/
ワイヤレス充電に対応
ワイヤレス充電Qi(チー)規格でiPhone8よりワイヤレス充電に対応するそうです。
充電マット(AirPowerマット)は来年発売予定です。バッテリーの駆動時間も最大2時間延びるようです。
はじめに
iOS開発でFirebaseのStorageとAuthを使おうとしたときに出たエラーが公式ページ見てもよくわからなかったのでメモして置きます。
[Firebase/Core][I-COR000003] The default Firebase app has not yet been configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your application initialization. Read more: https://goo.gl/ctyzm8.
Firebaseの実装について公式
https://firebase.google.com/docs/ios/setup
対応
AppDelegateのinitへFirebaseコードを追加
override init() {
super.init()
FirebaseApp.configure()
Database.database().isPersistenceEnabled = true
}
これで治りました。applicationメソッドでFirebaseApp.configure()を試したのですがそれだと何故かうまく行かなかったです。
Firebaseの仕様も今年の6月に変わっているのでひとのブログとか参考にするとうまくいかないので注意です。
公式も日本語版の翻訳は速度が遅いのとあてにならないので英語版を読みましょう。
はじめに
iOS11関連で開発者が対応しなければならない内容についてメモします。
iOS11が今年9月にリリースされます。(9月23日周辺が予想されています)
秋の発表イベントは9月12日開催。
https://www.gizmodo.jp/2017/09/apple-special-event-2017fall.html
9月12日の発表イベントでiOS11を9月19日にリリースすると発表しました
http://www.techradar.com/news/ios-11-release-date-news-and-features
今回は過去ipv6対応やATS対応などのような重い対応が必要になることはありません!
64ビット対応について
iOS8の対応のときに64ビット対応が必要とアナウンスされていましたがいよいよiOS11から32ビットアプリは動作しなくなります。
64ビット対応については過去記事を参考ください
http://to-developer.com/blog/?p=1398
インストールしているアプリから32ビットアプリで動作しなくなるアプリ一覧確認方法
設定画面より「設定」 → 「一般」 → 「情報」 → 「App」で端末にインストールしているアプリの中からios11で動作しないアプリの一覧が確認できます。
つまり32ビットアプリということになります。不安な場合は一度こちらで確認するといいと思います。
参考:
http://usedoor.jp/howto/digital/iphone-ipad/ios-32bit-app-ichiran-hyouji/
意外と大手アプリで対応がまだできてないアプリが意外と多くて驚きます。
Adobe Ideaアプリ、アメッシュアプリが8月31日現在でまだ未対応でした。
iOS11で変更(非推奨)APIの修正について
swift/objective-cで追加や非推奨となるAPI一覧が公開されているため、更新されたAPIはios11用にしてあげるといいです。
非推奨なので基本的には使えるはずですがいずれ使えなくなる可能性があります。
swiftのメソッドは非推奨ではなくremoveになっているのが結構あるので別途用意されている代わりのメソッドに移行する必要があります。
iOS 10.3 to 11.0 API Differences
Facebook,Twitter,Flickrのシェア機能をアプリで使っている場合の対応
Twitter、Facebook、Flickr、Vimeoの統合をできなくしたようです。
アプリでTwitterやFacebookのシェアやいいねをSDKではなくSLComposeViewControllerで実装している場合の挙動が変わる事になります。
TwitterやFacebookのアプリがインストールされている場合は問題なく実行できるが、アプリがインストールされていない場合にシェアやいいねができなくなります。また別記事で言及していきます。
appleinsider参考リンク
http://appleinsider.com/articles/17/06/05/apple-drops-twitter-facebook-flickr-vimeo-integration-in-ios-11
iOS11で追加された目玉機能など
ios11でaddされているAPIでiOS11ならではの目玉機能も多いため積極的に取り込むといいと思います。
特に拡張現実(ARKIT)などいままでにできなかったアプリが個人で開発できるため、アイデア次第で大きなマネタイズのチャンスになります。
過去記事参考
[iOS]WWDC2017発表のiOS11から追加された新API(Framework)について
ユーザー視点でiOS11のアップデートに備える
公式ページで「iOS 11 へのアップデートに備える」ページを公開しています
https://support.apple.com/ja-jp
参考までに主に端末がiOS11に対応しているかやバックアップについてなどをアナウンスしてくれています。
はじめに
FacebookのGraphAPIのバージョンの期限切れ予告メッセージが来ているため対応をメモします
2.3バージョンを使っている場合、期限がすぎると使えなくなりますよという知らせです。
「Reminder: Graph API v2.3 will be deprecated on July 10, 2017. Please use the API Upgrade Tool to understand how this might impact your app. For more details see the changelog. 」
GraphAPIの更新履歴と更新期限
更新履歴も期限も公式ページに記載していますので確認してください。
https://developers.facebook.com/docs/apps/changelog
大体リリースして2年で期限が設置されているため、毎回気を使って変更する必要がありますね。
アップグレードについて
WebもiOSもAndroidも比較的新しいバージョンから更新する場合はあまり修正する内容はありません。
たまにバージョンに寄り大幅に更新されている場合があります、と入ってもメジャーバージョンがアップグレードしている場合がほとんどです。
それ以外のマイナーバージョンのアップでは基本的にSDKを差し替えれば動作するはずですのでアップグレードの方法を公式ページで確認して更新してください。
iOS対応
iOSのFacebookSDK内でGraphAPIを使っています。どのバージョンを使っているかは更新履歴に記載されています。
現在のFacebookのSDKがGraphAPIのどのバージョンを使っているかを確認して、アップグレードしてください。
更新履歴
https://developers.facebook.com/docs/ios/change-log-4x
アップグレード方法
https://developers.facebook.com/docs/ios/upgrading-4x
Android対応
AndroidのFacebookSDK内でGraphAPIを使っています。どのバージョンを使っているかは更新履歴に記載されています。
現在のFacebookのSDKがGraphAPIのどのバージョンを使っているかを確認して、アップグレードしてください。
AndroidはGradleでインストールしている場合、Gradleファイル内でバージョンが確認できます。
更新履歴
https://developers.facebook.com/docs/android/change-log-4x
アップグレード方法
https://developers.facebook.com/docs/android/upgrading-4x
使っているGraphAPIの簡単な調べ方
SDKの更新履歴から追っていくのも大変ですね。Facebookの管理画面から対象のアプリを選択すると使用しているGraphAPIのバージョンがすぐに確認できます。
https://developers.facebook.com/apps/
アプリの詳細ページ
ここのバージョンを見たほうが早いですね。ここでGraphAPIのバージョンが2.3であれば期限があと少しで切れるのでアップグレードしてください。
2.4も10月に切れるので更新作業ができるだけはやく更新作業が必要です。汗
はじめに
WWDCで発表されたiOS11の新機能で用意されたAPI(Framework)をメモしておきます。
目玉はARと機械学習系でしょうか。
NFCは個人的にタグを持っているのでなにかしてみたいなと思いました。
公式ドキュメント
https://developer.apple.com/documentation
新API(Framework)
ARKit
目玉機能で拡張現実関連のapiです。カメラと連携したAR関連の処理はできそうですが、なにができるか興味深いです。
Integrate iOS device camera and motion features to produce augmented reality experiences in your app or game.
https://developer.apple.com/documentation/arkit
Vision
顔認識機能や動画のシーンを分類などを担うapiです。精度がどこまで上がっているか気になります。
Apply high-performance image analysis and computer vision techniques to identify faces, detect features, and classify scenes in images and video.
https://developer.apple.com/documentation/vision
IdentityLookup
「不要なSMSやMMSメッセージを識別してフィルタすることができるアプリの拡張機能」、、、いまいちわかりません。
smsの操作なんてできるんだったかな。
Create an app extension that can identify and filter unwanted SMS and MMS messages while preserving user privacy.
https://developer.apple.com/documentation/identitylookup
Core ML
機械学習関連の追加apiです。
Integrate machine learning models into your app.
https://developer.apple.com/documentation/coreml
DeviceCheck
デバイスや開発者ごとにデータのアクセスを分けられる?のでしょうか。利点がまだわかりません。
Access per-device, per-developer data that your associated server can use in its business logic.
https://developer.apple.com/documentation/devicecheck
FileProvider
ファイルのプロバイダを拡張したapiのようです。
他アプリが保管しているディレクトリやファイルへのアクセスなどができる機構があるようです。
Implement a file provider extension to let other apps access the documents and directories that are stored and managed by your containing app.
https://developer.apple.com/documentation/fileprovider
FileProviderUI
「ドキュメントブラウザのコンテキストメニューにアクションを追加する」、、よくわかりません。
Add actions to the document browser’s context menu.
https://developer.apple.com/documentation/fileproviderui
Core NFC
NFCのタグ読み込み用のapiです。調べれてないですが、すでに在ったような気がするので機能追加だと思います。
Detect NFC tags and read messages that contain NDEF data.
https://developer.apple.com/documentation/corenfc
PDFKit
pdfの操作系apiです。apiをみると表示系のことしかできないように見えます。
Display and manipulate PDF documents in your applications.
https://developer.apple.com/documentation/pdfkit
まとめ
毎年色々なframeworkが追加されて調べてる間にもまた来年のWWDCの日がまたきそうで気を抜けません。
はじめに
UniversalLinksでディープリンクを実装し、リンククリックでアプリを起動する方法をメモします。ios9より対応しているため、それ以前のバージョンは考慮しません。(実際はカスタムURLを使うと実装が可能です。iOS9以前を対象ととする場合はバージョンにより切り分ける処理が、アプリ側もサーバ側も必要になります。)
やりたいこと
1)既にアプリがインストールされている場合はアプリを起動
2)アプリがインストールされていない場合はストアを起動(アプリのインストールを促す)
ドキュメント
https://developer.apple.com/jp/documentation/General/Conceptual/AppSearch/UniversalLinks.html
UniversalLinksについて
引用:
ユニバーサルリンクに対応すると、iOS 9ユーザがウェブサイトのリンクをタップしたとき、Safariを経由せず、インストール済みアプリケーションに直接遷移させることが可能になります。もし未インストールの場合はSafariが起動し、ウェブサイトが開きます。
iOS9より前のバージョンのUniversalLinks挙動
引用:
iOS 9.0よりも古いバージョンであれば、ユニバーサルリンクをタップするとSafariが起動し、リンク先ページが開きます。
新規アプリの場合はios9以前のバージョンは現時点で5%以下のため捨てて良いと思います。
https://developer.apple.com/support/app-store/
UniversalLinks実装について
UniversalLinksの実装にはアプリ側とサーバ側どちらも設定を行う必要があります。サーバ側のみ対応してもアプリ側で対応しないとディープリンクは有効に働きません。
サーバ側の実装:
1)apple-app-site-associationファイルの作成と設置
アプリ側の実装:
1)com.apple.developer.associated-domainsエンタイトルメントに該当するドメインのエントリを追加する
2)ディープリンクをハンドリング
[サーバ側] 1)apple-app-site-associationファイルの作成と設置
アプリとサーバで関連付けを行い信頼をあげるための処理を入れる必要があります。
apple-app-site-associationファイルを作成し、サーバに設置し、アプリ側でインストール時にダウンロードを行い中身の整合性チェックを行いセキュアな接続をしています。
引用:
apple-app-site-associationファイルは、ドメインごとに内容を変えて用意する必要があります。たとえばapple.comとdeveloper.apple.comには、それぞれ独立にapple-app-site-associationファイルを用意します。この2つのドメインは、提供するコンテンツが異なるためです。一方、apple.comとwww.apple.comは、同じコンテンツを提供するので、関連づけファイルも同じで構いません。ただし、両方にこのファイルを置く必要があります。iOS 9.3.1以降で動作するアプリケーションの場合、圧縮されていないapple-app-site-associationファイルのサイズは、署名済みファイルであるかどうかにかかわらず128KBを超えないことが要件になります。
apple-app-site-associationファイルにドメイン情報を設定します。
ファイルはjsonですが拡張子はつけるとうまく動作しないようです。
設定例:
{
“applinks”: {
“App”: [],
“details”: [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
“appID”: “ABCD1234.com.apple.wwdc”,
“paths”: [ "*" ]
}
]
}
}
引用:apple-app-site-associationファイル記述に関する説明文
apple-app-site-associationファイルには「apps」キーが必須です。その値は、リスト6-1のように、空の配列でなければなりません。detailsキーの値は辞書の配列で、ウェブサイトがサポートするアプリケーションごとに辞書を用意します。システムは辞書が配列中に現れる順序に従ってアプリケーションを照合します。その結果、ウェブサイトのパスによって、処理を引き受けるアプリケーションが決まります。
アプリケーションごとに用意する辞書には、appIDキーとpathsキーが必要です。appIDキーの値はチームIDまたはApp IDの接頭辞であり、このプレフィックスの後ろにバンドルIDが付加されます(appIDの値は、アプリケーションのビルド後、アプリケーションのエンタイトルメントに含まれている“application-identifier”キーに関連づけられているものと同じ値です)。pathsキーの値は、ウェブサイト中のどのパスを当該アプリケーションが処理し、どのパスを当該アプリケーションには関連づけないかを表す文字列の配列です。ユニバーサルリンクとして処理しない領域を指定するには、パス文字列の先頭に“NOT ”を付加します(Tの後ろには空白文字を入力)。たとえば、リスト6-1に示したapple-app-site-associationファイルの場合は、paths配列を以下のように書き換えることで、ウェブサイトの/videos/wwdc/2010/*領域がユニバーサルリンクとして処理されないように設定できます。
“paths”: [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
paths配列に含まれている個々のパスは、記述されている順に評価され、肯定または否定の検索文字列に一致するものが見つかった時点で評価が中止されます。したがって、優先度の高いパスを低いパスよりも先に記述する必要があります。なお、照合するのはURL中の「パス」部分だけで、クエリ文字列、フラグメント識別子など、その他の部分は無視します。apple-app-site-associationファイルには、ウェブサイトのパスをさまざまな方法で記述できます。その例をいくつか示します。
*を使って、ウェブサイト全体を指定する。
具体的なURL(たとえば/wwdc/news/)を記述して、リンクを個別に指定する。
具体的なURLに*を付加して(たとえば/videos/wwdc/2015/*)、ウェブサイトの特定のセクションを指定する。
任意の部分文字列に合致する「*」のほか、任意の1文字に合致する「?」も指定できます。この2つのワイルドカードをひとつのパスの中で用い、「/foo/*/bar/201?/mypage」のように記述することも可能です。
[アプリ側] 1)com.apple.developer.associated-domainsエンタイトルメントに該当するドメインのエントリを追加する
サーバとの関連付けのため、ドメインをエントリします。
xcodeのcapabilitiesから設定します。
引用:
com.apple.developer.associated-domainsエンタイトルメントに、アプリケーションがユニバーサルリンクとして扱うドメインの一覧を記述します。Xcode上で、「Capabilities」タブの「Associated Domains」セクションを開き、該当する各ドメインのエントリを追加してください。applinks:を接頭辞として付加し、たとえばapplinks:www.mywebsite.comとします。この一覧に記述するドメインの数は、20〜30以下に抑えてください。
関連するドメインのすべてのサブドメインをパターンマッチングの対象にするには、個々のドメイン名の先頭に*.を接頭辞として付けることで、ワイルドカードを指定します(ピリオド必須)。ドメイン名のパターンマッチングの基準になるのは、applinksエントリに含まれている最長の部分文字列です。たとえば、applinks:*.mywebsite.comとapplinks:*.users.mywebsite.comというエントリを指定した場合、emily.users.mywebsite.comドメインについては、長いほうの*.users.mywebsite.comエントリとのパターンマッチングが実行されます。*.mywebsite.comというエントリの場合、アスタリスクの後ろにピリオドがあるため、mywebsite.comに一致しているとは見なされないことに注意してください。*.mywebsite.comとmywebsite.comのどちらについてもパターンマッチングを有効にするには、applinksエントリをそれぞれ別に記述する必要があります。
[アプリ側] 2)ディープリンクをハンドリング
アプリでディープリンクを取得しドメインにより処理を切り分けます。
引用:
HandoffにUIApplicationDelegateメソッドを採用して(特にapplication:continueUserActivity:restorationHandler:)、アプリケーションでリンクを受信して適切に処理できるようにします。
実装コード例
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let webpageURL = userActivity.webpageURL! // userActivity.webpageURLのurlを取得し、ドメイン判定を行い処理を切り分ける。サポートしていない場合はsafariへリダイレクト処理を入れるのが慣例
}return true
}
アプリをインストールしていない場合にStoreへ遷移するには
Universal Linksは直接Storeへの遷移はできないため、一旦、未インストール用のページをサーバで用意して、そちらに遷移し、そこのファイル内でStoreへ遷移させることが必要になります。
<a href=”itmss://itunes.apple.com/us/app/myapp/id[アプリID]?ls=1&mt=8″></a>
アプリIDにiTunesサイトのリンクのIDを入れると遷移します
参考
http://qiita.com/mono0926/items/2bf651246714f20df626
https://developer.apple.com/jp/documentation/General/Conceptual/AppSearch/UniversalLinks.html
はじめに
iOS/Androidで知っていた方がいいサイトをメモしておきます。
iOS
開発公式ページ(日本語)
https://developer.apple.com/jp/
公式ドキュメント(日本語)
https://developer.apple.com/jp/documentation/
WWDC
https://developer.apple.com/wwdc/
appleセキュリティアップデート情報
https://support.apple.com/en-us/HT201222
xcodeリリースノート
https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html
バージョンシェア情報
https://developer.apple.com/support/app-store/
Android
開発公式ページ
https://developer.android.com/index.html
マテリアルデザインガイドライン
https://material.io/guidelines/material-design/introduction.html
Google I/O
https://events.google.com/io/
APIレベル一覧
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html?hl=ja
AndroidStudioのリリースノート
https://developer.android.com/studio/releases/index.html
バージョンシェア情報
https://developer.android.com/about/dashboards/index.html
はじめに
Carthage(カーセッジ)を使ったプロジェクトでswiftを2.2から3.0にコンバートした時に出たエラーを改善したメモを残します。
以下の2つのライブラリを取り込んでいたところエラーが表示しました
import Alamofire
import SwiftyJSON
原因
エラー内容
Module compiled with Swift 3.0 cannot be imported in Swift 3.0.2
swiftの3.0でコンパイルしたものを3.0.2でインポートすることはできないと言っているようです。
すでにコンパイルしているライブラリを持ってきていることが原因です。
解決
ソースコードを持ってきてローカル側でビルドすることで改善します。
carthageのupdateコマンドに–no-use-binariesオプションを追加することでバイナリを持ってこなくなります。
$ carthage update –no-use-binaries
最後にプロジェクトのクリーンを行いプロジェクトのビルドをすることで実行できました。
はじめに
Carthage(カーセッジ)はライブラリ管理ツールです。プロジェクトの依存するライブラリまとめて管理することができます。
依存ライブラリのバージョンも指定できるので、ライブラリのバージョンがあがって動かなくなったなどがなくてよいです。railsあたりのBundlerのようなものです。
ライブラリツールはcocoapodsが定番でcarthageが別途作られてます。
ここら辺の違いなどはいろいろなサイトで紹介してました
http://qiita.com/nori0620/items/b81ae171f0e82b0c2d8a
Carthageリポジトリ:
https://github.com/Carthage/Carthage
Carthageを使ってライブラリをインストールする
http通信ライブラリのalamofireとjsonライブラリのswiftyjsonライブラリをプロジェクトに組み込みます。
https://github.com/Alamofire/Alamofire
https://github.com/SwiftyJSON/SwiftyJSON
Carthageのインストール
パッケージ管理のhomebrewを使います。
念のためbrewのアップデートをします
$ brew update
インストールします
$ brew install carthage
バージョン確認を確認します。2016/7/31現在は0.17.2でした。
$ carthage version
ライブラリの追加をする
Xcodeで新規プロジェクトを作成しターミナルでプロジェクト直下まで移動してください。
プロジェクト直下にcarthageの設定ファイルcartfileを作成します。
$ touch Cartfile
cartfileファイルにインストールするライブラリを追加します
github “SwiftyJSON/SwiftyJSON”
github “ishkawa/Alamofire”
cartfileファイルのインストールライブラリのビルドをします
$ carthage update –platform iOS (git)-[master]
*** Cloning SwiftyJSON
*** Fetching Alamofire
*** Checking out Alamofire at “3.4.1″
*** Checking out SwiftyJSON at “2.3.3″
*** xcodebuild output can be found in /var/folders/6q/1bzjyv810gbfrkhyy0sqrj280000gn/T/carthage-xcodebuild.0ZbSEg.log
*** Building scheme “Alamofire iOS” in Alamofire.xcworkspace
*** Building scheme “SwiftyJSON iOS” in SwiftyJSON.xcworkspace
※オプションに–platform iOSを入れることでwatch、osxプラットフォームのビルドを行わなくなります。iOSだけであれば不要です。
プロジェクトにライブラリを紐付ける
cocoapodsと違い、使用するライブラリを選んで取り込む作業が入ります。
ここまでの段階でプロジェクト配下にCarthage/Build/iOSディレクトリができています。
iOSディレクトリの中にAlamofire.frameworkファイルとSwiftyJSON.frameworkファイルがあり、このファイルをプロジェクトに取り込みます。
XcodeでプロジェクトのGeneralから「LinkedFrameworks and Libraries」の「+」ボタンを押します。
ダイアログが表示されるので、「Add Other…」ボタンから上記の2ファイルを選択して完了です。
ソースからコール
あとはソースないでimportするだけです。
import Alamofire
import SwiftyJSON
はじめに
webviewでhttpサイトを表示しようとするとios9以降の場合、サイトが表示されません。
ios9よりATS(https通信)の設定がデフォルトでオンになっているため、表示できません。
前に同様の記事を書いたのに、ちょっとはまってしまいました。ちゃんとログをみないとだめですね。
ATSについてはこちら:
http://to-developer.com/blog/?p=2036
事象
実装コード例)
@IBOutlet weak var webView: UIWebView! let homeUrl = "http://yahoo.co.jp" // これがhttpsサイトならATSが有効状態で表示します。 override func viewDidLoad() { super.viewDidLoad() openUrl(homeUrl) } func openUrl(urlString: String){ let url = NSURL(string: urlString) let urlRequest = NSURLRequest(URL: url!) webView.loadRequest(urlRequest) }
httpサイトを表示しようとするとxcodeのログに次のログが出力されます。
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.
対応策
xcodeのログの通りplistファイルで一時的に回避することができます。
次のコードを追加することで回避できます。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
はじめに
xibはXML Interface Builderの略です。xibをエックスアイビーと呼んでいましたが一般呼称は違うようです。←頭文字読みなのでエックスアイビーでも間違いではないですけど。
答え
以下サイトよりzibと言われていることがわかりました。日本語読みでジブが正しいようですね。でも伝われば何でも良いですね。
http://lists.apple.com/archives/xcode-users/2008/Jul/msg00927.html
はじめに
2015年9月16日にios9がリリースです。
伴ってアプリ側もios9対応と前々から言われているipv6対応をしていく必要があるので参考となる情報を載せておきます。
iOS9も動作保障するのであれば一旦ビルドして早急に確認しましょう
iOS9ユーザ視点新機能:
http://www.apple.com/jp/ios/whats-new/
iOS9日本公開日時は17日の午前2時を予定
http://www.timeanddate.com/worldclock/fixedtime.html?msg=iOS+9&iso=20150916T10&p1=224
iOS9対応/ipv6対応について記事を載せてる参考サイト
公式
https://developer.apple.com/library/prerelease/ios/navigation/
リリース内容公式(ios9.0)
https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html
リリース内容公式(ios9.1)
https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9_1.html
apns(2015WWDCより)
http://odecee.com.au/wwdc-2015-big-changes-to-apple-push-notifications/
iOS9 で必要な IPv6 only Network への対応
http://qiita.com/shao1555/items/4433803419dfc72bf80b
秋のiOS 9対応リリースに向けて、iOSアプリ開発者が今からやっておくべきことまとめ
http://qiita.com/mono0926/items/e7c4ca0bf0f5196b88a2
【追記】iOS9でHTTP通信がSSL通信になるのを防ぐ方法
http://nlogic.jp/?p=412
iOS9 ATS問題
http://qiita.com/yanayanalte/items/e6d83c12af77fa238a58
[iOS 9] iOS 9 で追加された App Transport Security の概要
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/
【iOS9】API Diffs から見る iOS 9 の新機能
http://d.hatena.ne.jp/shu223/20150609/1433813938
開発者向けiOS 9、WatchOS 2、Swift 2、Xcode 7の新機能と新しいApple Developer Programの参考情報まとめ
http://www.atmarkit.co.jp/ait/articles/1507/24/news025.html
iOS9 SDKでDeprecatedになるもの。
http://quesera2.hatenablog.jp/entry/2015/06/29/001035
iOS 9の「Search API Best Practices and FAQs」が公開されたので読み解いてみた
http://qiita.com/mono0926/items/27af791065ed919255e0
iOS9のWebviewでNSURLErrorDomainとなる場合の対処法(ATS)
http://qiita.com/peromasamune/items/f5b72c4dbd33b5019611
UIWebViewでhttpなURLにアクセスしようとしたら代わりにSFSafariViewControllerで開くようにする
http://qiita.com/bricklife/items/ac92be3e33c7c9eaca9b
iOS9対応について
iOS9対応を行い、これからiOS9へ移行したユーザでも使用できるようにアプリも移行作業を進めましょう
まずXcodeで[Base SDK]をiOS9.0に設定しビルドします。
ここでビルドエラーになった場合に、エラー箇所を修正していきます。
公式資料:
https://developer.apple.com/library/prerelease/ios/navigation/
XCode 7 への移行について
2015/9/11時点では9/9のXcode 7.1 beta版が最新版です。
iOS9はXcode6でビルド可能です、XCode7の機能を使う予定がなければ、正式リリースされたあとで入れてもいいと思います。
XCodeバージョン情報:
https://developer.apple.com/xcode/download/
iOS9で変更(非推奨)APIの修正について
swift/objective-cで追加や非推奨となるAPI一覧が出ているため、更新されたAPIはios9用にしてあげるといいです。
非推奨なので基本的には使えるはずですがいずれ使えなくなる可能性があります。
swiftのメソッドは非推奨ではなくremoveになっているのが結構あるので別途用意されている代わりのメソッドに移行する必要があります。
https://developer.apple.com/library/prerelease/ios/releasenotes/General/iOS90APIDiffs/index.html
ATS(App Transport Security)について
公式より、ios9とOS X 10.11からサーバとアプリ間のネットワークはセキュア(https)なアクセスを行う機能とのことです。デフォルト設定でオンになっているのでhttpでもアクセスできるようにするにはATSの機能をオフ設定にして設定を上書きしないといけなくなりました。
Xcodeで[Base SDK]をiOS9.0に設定してビルドするとATSがデフォルトでONになるので、この設定を行わない限りは既存アプリでOSをiOS9にアップグレードしてもアプリはエラーにはなりません。
App Transport Security is a feature that improves the security of connections between an app and web services. The feature consists of default connection requirements that conform to best practices for secure connections. Apps can override this default behavior and turn off transport security.
Transport security is available on iOS 9.0 or later, and on OS X 10.11 and later.
ユーザ情報などのセキュアにするべきデータを扱うアプリ(サービス)では、すでにSSL対応はしていても、公に公開されているRSSデータのやり取りなどではSSL対応していない場合が多いとおもいます。
今回のATS機能により対象がすべてのサーバAPIのデータ・WebViewに表示しているサーバサイト自体もすべてSSL対応したサイトへのアクセス以外は受け付けなくなります。
対応方法は以下3点のいずれかになります
- サーバをSSL対応する(httpsでアクセスできるようにする)
- ATSで対象サーバのみ無効にする(Info.plistファイルを編集して対応可能)
- ATS自体を無効にする(Info.plistファイルを編集して対応可能) ※リジェクトされる可能性あるのでやめたほうが無難
サーバ側で対応する場合はTLSプロトコルの1.2以上をサポートする必要があります
The server must support at least Transport Layer Security (TLS) protocol version 1.2.
Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)
Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key.
Invalid certificates result in a hard failure and no connection.
アプリの設定ファイルInfo.plistファイルでデフォルトのセキュアなアクセスを上書きして変更することができます
You can specify exceptions to the default behavior in the Info.plist file in your app or extension. Use the keys in the property list for specific exceptions or to turn off App Transport Security.
ATSを有効状態で対象サーバのみ無効にするにはInfo.plistに以下のように指定すると良いようです。
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>[無効にするサーバドメイン]</key> <dict> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
NSExceptionDomainsで例外(無効)にするドメインを指定します
NSExceptionDomains
A dictionary of App Transport Security exceptions for specific domains. Each key is a string containing the domain name for the exceptions.
指定の詳細は公式資料を参考ください
ipv6対応について
App Storeの審査で、現行はipv4/ipv6の何れかまたは両方の対応があるアプリはリリース可能でしたが、
今後はIPv6対応をしていないものはリリースできなくなります。
サーバ,キャリアがipv6対応していればとくに、アプリ内で対応はだいたいのアプリで不要となりますがipv4に依存している場合に修正が必要になるので以下項で記載します。
公式資料に移行手順が書いてあります。
公式資料:
https://developer.apple.com/library/
https://developer.apple.com/videos/wwdc/2015/?id=719
http://devstreaming.apple.com/videos/wwdc/2015/719ui2k57m/719/719_your_app_and_next_generation_networks.pdf
ipv4アドレスを直接指定している場合の対応
固定のipv4のipアドレスを直接アプリでリテラル指定している場合は修正が必要になります。
webviewやwebapi時に指定しているホストはipアドレスではなくドメイン指定としてください。
Don’t Use IP Address Literals
Make sure you aren’t passing IPv4 address literals in dot notation to APIs such as getaddrinfo and SCNetworkReachabilityCreateWithName. Instead, use high-level network frameworks and address-agnostic versions of APIs, such as getaddrinfo and getnameinfo, and pass them hostnames or fully qualified domain names (FQDNs). See getaddrinfo(3) Mac OS X Developer Tools Manual Page and getnameinfo(3) Mac OS X Developer Tools Manual Page.
引用:
https://developer.apple.com/library/
非推奨なネットワークapiを使用している場合の対応
ipv4に依存(ipv4で動作しているメソッドなど)したメソッドをコールしている場合は修正が必要になります。
ipv4に依存したNSURLConnectionを使っている場合は、代わりにNSURLSessionを使ってください。
Deprecated APIs
The following APIs are deprecated:
The Address Book and Address Book UI frameworks. Use the Contacts and Contacts UI frameworks instead.
The NSURLConnection API in the Foundation framework. Use NSURLSession APIs instead.
ipv4依存のapiを仕様している場合の対応
変数指定で「uint32_t, in_addr, sockaddr_in」を使っている場合、apiで「inet_aton, gethostbyname」を使っている場合、ipv4でしか動作しないapiをコールしている場合、ipv4のアドレスチェックをアプリでしている場合などはipv6で動作するよう修正が必要とあります。
What Breaks?
IPv4-only code
IPv4-only storage objects: uint32_t, in_addr, sockaddr_in
IPv4-only APIs: inet_aton, gethostbyname
IPv4-only usage of an API: gethostbyname2(hostname, AF_INET);
Pre-flight checks before connecting
• Checking if device has an IPv4 address
• Checking for reachability to 0.0.0.0
対応期限
At WWDC 2015 we announced that iOS 9 will support IPv6-only network services. All apps submitted to the App Store must support IPv6 starting in early 2016. To make sure your app is compatible, use the networking frameworks (e.g., “NSURLSession”), avoid use of IPv4-specific APIs, and avoid hard-coded IP addresses. Before submitting your app, test for compatibility.
引用:
https://developer.apple.com/news/?id=08282015a
「starting in early 2016」とある通り
今のところは2016年初頭までに対応する必要があるようです。元々の発表では2015年末までだったため、変更が入りました。
ここを過ぎるとAppleStoreの審査に通らなくなります。これから実装するものは対応を必須としたほうがよさそうです。
APNSプッシュ通知について
iOS9対応とは別でAPNSの仕様が変更されます。
2016年で正確な日付はアナウンスされていませんが、デバイストークンの長さが32バイトから100バイトに変更されます。
DBのサイズが100未満で固定にしている場合は変更が必要ですね。
APNS token getting bigger
Up until this point, a device token (used to identify a particular iOS or Mac device for the purposes of sending push notifications) has been a 32-character hexadecimal string. At WWDC 2015 – buried in the middle of a history lesson about how to use APNS – Apple quietly announced that they are planning on lengthening their device tokens from 32 bytes to 100 bytes next year. It may seem like a boring change – but it’s something many of us will need to plan for by checking that our database schema will accommodate these larger tokens.
引用:
http://odecee.com.au/wwdc-2015-big-changes-to-apple-push-notifications/
他サービスのios9のアナウンスについて
うーん、動作検証した上で動かない可能性を懸念するのはなにがあるんでしょう。
『アイ★チュウ』 iOS9対応につきまして
http://www.i-chu.jp/p655
【重要】スマレジのiOS9対応について
http://timecard.smaregi.jp/news/press/2015090847.php
感想
Androidと違いiosはバージョンが上がったタイミングでSDKにあわせて移行対応が必要になる場合が多いので毎年この時期は大変です。
Androidも必須でなくてもバージョンが上がったらガイドラインの変更にあわせて直した(Deprecateメソッドも増えるので)ほうがいいですね。
ただ便利なUIツールやAPIが使えないっていうくらいな印象です。
はじめに
2015年5月13日にリリースiosアプリに関するアナリティクス機能(ベータ版)が実装されました。
これでapple純正のアプリ側にアナリティクス専用ライブラリや独自実装がしなくても良くなりましたね。
いままでもダウンロード数や課金売り上げはわかりましたが、アナリティクス実装により、ユーザのダウンロードの分析ができるので、アプリの最適化に役立てそうです。
アナリティクス公式ガイドラインについて
アナリティクスの詳細・アクセスについては以下のガイドライン・ドキュメントを確認ください
アクセス:
https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa
公式アナウンス:
https://developer.apple.com/app-store/app-analytics/
公式ガイドライン:
https://itunesconnect.apple.com/downloads/Documentation/iTunes_Connect_App_Analytics_Guide_v1.pdf
アナリティクスで確認できる情報について
Googleアナリティクスと同様な考えで、Googleが持っているマーケットからアプリインストール・アプリ起動の流れで取得しているデータを確認できるイメージです。
マーケット(app store)のPV数からマーケットまでのリファラー、そこからのインストール数、セッション数、アクティブデバイス数などかなりの情報がわかります。
アナリティクスのホームページに「概要」「メトリックス」「ソース」「使用率」と4つのタブがあるのでそれぞれで何が確認できるのかを追ってみます。
はじめにアナリティクスの注意点
IOS8以降の端末のみ対象になります。ただ2015/4にIOS8のシェア率は全体の75%を超えたそうなので、データとしては有益な情報になるはずです。
解析されるデータは全て匿名化されているので、ユーザを識別することはできません。
App Analytics only displays data from devices using iOS 8 or later. All data is anonymized and
aggregated with data from other users. To learn more about data metrics and what they mean,
see the Glossary.
概要タブの情報について
各ユーザデータの概要を簡略的に表示している画面です
全期間表示 ※Appが登録されてから現在までのデータ / 過去データで表示されます。
•AppStoreの閲覧数
アプリのマーケットページの閲覧数
•Appユニット数
アプリのマーケットページの閲覧からインストールを行った数 ※同一ユーザやアップデートはカウントしない
•売上
有料アプリの売上金額
•セッション数
アプリを起動した回数。同一ユーザで複数化起動した場合はカウントアップされる。利用情報をApp開発者と共有を同意したユーザのみカウント。
•App内課金数
アプリ内の課金(In-App Purchases)
•アクティブなでデバイス数
セッションでカウントされたユーザの端末数。複数回アプリ起動した場合も1カウントのみ。
上記までのそれぞれのテリトリ(国別)・プラットフォーム(iPhone/iPad/iPod)表示します。
メトリックスタブの情報について
各ユーザデータのメトリックス(合計・平均・指標)を表示している画面です
売上
•AppStore閲覧数
•AppStoreユニット数
•App内課金数
•売上
使用状況
•インストール数
•セッション数
•アクティブなデバイス数
•過去30日間のアクティブなデバイス数
上記データをAppバージョン・iOSバージョン・Webサイト・キャンペーン・テリトリ(国別)・プラットフォーム(iPhone/iPad/iPod)・地域で表示します。また折れ線グラフ・面グラフ・棒グラフで可視化して確認できます。
ソースタブの情報について
「トップWebサイト」と「トップキャンペーン」がありました。
ここが画面からどういった情報を出すのかが読み取る事ができませんでした。。。
公式ガイドラインのドキュメントによりますと、
トップWebサイト
Top Websites
The Top Websites view is available from the Sources tab in App Analytics. This view shows app
sales, usage, and monetization for users that have been referred from a specific website. Click a
website name, and you will have access to metrics for users referred by that website. Within
each metric you will only see data for a specific referring website.
You can use this information to identify websites that refer the right users to your app. For
example, if a larger user base is especially important to your app, focus on websites that refer
the most users.
特定のWebサイトにおいてくれたマーケットのリンクからの流入のユーザ情報(リンクもとページアドレス・AppStore閲覧数・Appユニット数・売上・セッション数)がわかるようです。つまりリファラーですね。
※こちら環境では「Webサイトを表示するための十分なデータがありません。」のメッセージでデータが見えませんでした><
トップキャンペーン
Top Campaigns
The Top Campaigns view is available from the Sources tab in App Analytics. Campaigns are
custom App Store links you can use in your marketing material, websites, or advertising.
Campaign links allow you to see your app sales, usage, and monetization for specific campaigns.
Click a campaign, and you will have access to all of the same App Analytics metrics. Within each
metric you will only see data for a specific campaign you’ve made.
This makes it easier to see which marketing campaign or website advertisement creates the
best results. For example, by looking at In-App Purchases filtered by campaign, you can see
which types of marketing attract customers who are more likely to make a purchase.
アプリのキャンペーン用リンクを作成できる機能があり、ここから作成してできたリンクを設置する事でユーザ情報(リンクもとページアドレス・AppStore閲覧数・Appユニット数・売上・セッション数)がわかるようです。
※こちら環境では「キャンペーンを表示するための十分なデータがありません。」のメッセージでデータが見えませんでした><
使用率タブの情報について
リテンション表示として「指定日付でAppをインストールして、翌日以降にAppを使用したユーザの割合」と「指定日にAppを初期インストールし、その後 Appを使用したユーザの割合」がそれぞれわかります。
「指定日にAppを初期インストールし、その後 Appを使用したユーザの割合」については時間単位でパーセント表示で細かく分かります。
統括
アプリでマネタイズを行っている場合に、SEOやサイトの最適化に非常に役に立つ情報が取得できました。
とくにリファラーが分かると言うのは、Webと同様で広告の効果測定などにも役立ち、アナリティクスを使う場合と使わない場合で広告の打ち方やランディングページの作り方が変わってくるのかと思います。
はじめに
iosの申請ではとくにスクリーンショットの画像を作成するのが手間になるので、忘れないように直にできる方法をメモしておきます。
申請時のスクリーンショットについて
5パターンの解像度に合ったサイズでスクリーンショットを載せる必要があり少しめんどくさいです。
スクリーンショットのため、対象のアプリを起動してiphoneでまず5枚(最低1枚)のスクリーンショットを撮ってください。
その画像を元に、リサイズ処理をするのが手っ取り早いと思います。
各申請サイズ一覧
画像サイズ | 備考 | |
3.5inch[iphone3/3GS/4/4S] | 640*920,620*960,960*640 | 最大5枚指定(最低1枚必須) |
4inch[iphone5] | 640*1096,640*1136,1136*600,1136*640 | 最大5枚指定(最低1枚必須) |
4.7inch[iphone6] | 750*1334,1334*750 | 最大5枚指定(最低1枚必須) |
5.5inch[iphone6] | 1242*2208,2208*1242 | 最大5枚指定(最低1枚必須) |
ipad | 768*1024 | 最大5枚指定(最低1枚必須) |
リサイズツールでリサイズ
画像のリサイズツールは検索すると沢山あるのでどれでもいいとは思いますが、macを使っている場合は「iMage Tools」というツールが使いやすかったのでおすすめです。
下記よりインストールをしてください
https://itunes.apple.com/jp/app/image-tools/id493949693?mt=12
起動したらスクリーンショット画像をドラッグでアプリに貼付けます。右側メニューのResizeをONにして、「Fix to Rectangle」を選択します。そこからwidth,heightを指定します。各サイズに合わせて指定し、startボタンでリサイズが実行されます。
アルファ(透過)の除去
iosの申請時に画像に透過画像がある場合、エラーメッセージが表示されて画像を指定できません。
そのため、アルファを除去する必要があります。macの場合、画像をダブルクリックでプレビューアプリが起動します。メニューの「ファイル」を選択し、「書き出す」でフォーマット(png,jpg,tiffなど)、アルファの指定ができます。
アルファのチェックを外し保存でアルファを除去できます。
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年6月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ