- 1. Swiftのテキストフィールドで数字以外使えなくするやり方
- 2. iOSのショートカットからBandに投稿する
- 3. WKWebViewのCookieを同期にして取得する
- 4. Xcodeプロジェクトの生成ツール「XcodeGen」のセットアップ&操作方法
- 5. UITableViewCellEditControlとUITableViewCellReorderControlの画像を変更する(複数選択可能時のみ)
- 6. Objective-Cでの三項演算子
- 7. Objective-Cで文字列の連結方法
- 8. Bitriseで「could not get icons for app」のエラーが出るときの解決法
- 9. GAS WebAppをAPIサーバーとして、iOSから直接スプレッドシートのデータを取得する
- 10. 「一部だけ角丸にする」をSwiftUIで実現する
- 11. iOSのショートカットでGoogleカレンダーに予定を新規登録する
- 12. [Swift] Alamofire+RxSwiftでUpload APIクライアントを作る
- 13. [iOS] Host Applicationを無効化してユニットテストを爆速化する
- 14. iOSアプリの配布方法まとめ
- 15. iOSアプリのDEBUGビルドを高速にしてみた
- 16. 【iOS】APNS証明書登録手順 2020年版
- 17. CoreNFCのFelica(NFC Type F)
- 18. Swift(iOS)でイケてるトースト・バナー・ポップアップを導入する (SwiftEntryKit)
- 19. 【香川県】App Storeのガイドラインに抵触しない「ゲーム依存症対策条例案」対応を実装してみた【Unity】
- 20. iOS, Androidアプリの強制アップデート(サーバーレス)
Swiftのテキストフィールドで数字以外使えなくするやり方
今回はSwiftでテキストフィールドで数字以外使えなくするやり方を紹介します。
#コード
今回は数字は0から9の間の数字を対象とします。
textfiledのtextfiledメソッドの中に書きます。#動作
このコードを書いてからの動作は、0から9以外の文字は打つことができなくなります。
例えば電話番号だけ入力できるようにしたい時など、利用できるかと思います。ではでは!
iOSのショートカットからBandに投稿する
## BANDとは
> BANDは、グループコミュニケーションを促進するモバイルコミュニティアプリケーションです。 Naver Corporationによって作成されたこのサービスは、iOS、Android、およびデスクトップで利用できます。
https://en.m.wikipedia.org/wiki/Band_(software)LINEの姉妹アプリですね。
## ショートカットとは
日々の些事を省略してくれるiOS用のアプリケーションです。
https://apps.apple.com/jp/app/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88/id915249334## BAND API
BANDはAPIを提供しています。
ユーザのプロフィールを取得したり、投稿をしたりできます。
https://developers.band.us/develop/guide/api# 目標
ショートカットからBANDに投稿すること。## BAND APIにレジスターする
https:/
WKWebViewのCookieを同期にして取得する
###WKWebViewのCookieを同期にして取得する
NSRunLoopを使用します。
-(NSMutableArray*)getCookies{
__block BOOL keeyAlive = YES;
__block NSMutableArray*cookieArray = [NSMutableArray new];
[[WKWebsiteDataStore defaultDataStore].httpCookieStore getAllCookies:^(NSArray
*_Nonnull cookies) {
for(NSHTTPCookie*cookie in cookies){
[cookieArray addObject:cookie];
}
keeyAlive = NO;
}];while(keeyAlive) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLo
Xcodeプロジェクトの生成ツール「XcodeGen」のセットアップ&操作方法
## はじめに
もともと気になっており、先日の勉強会で[XcodeGenのLT](https://speakerdeck.com/giginet/xcodegenchao-ru-men)を聞いて、触ってみようと思いました。
触ってみた結果、業務でも導入したいと考えています。
「プロジェクトファイルがコンフリクトしない」という特徴は、複数人による開発では非常に大きなメリットになるためです。## 「XcodeGen」とは?
Xcodeプロジェクトファイル( `.xcodeproj` )を定義ファイル( `project.yml` )から生成する、Swift製のコマンドラインツールです。
YAMLでプロジェクトの設定を書くことで、プロジェクトファイルが自動生成されます。
そのため、プロジェクトファイルを自分たちで編集する必要がなくなります。![xcodegen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138245/8f912c3d-6e54-5721-3bca-862aae5b0875.
UITableViewCellEditControlとUITableViewCellReorderControlの画像を変更する(複数選択可能時のみ)
とってもニッチな記事です:smirk_cat:
参考にする人は少なそうですが、せっかく仕事で触ったのでまとめておきます:pencil:# `UITableViewCellEditControl`, `UITableViewCellReorderControl`とは
`UITableView`で編集モードになったときに、左右に出てくる部品のことです。
![tableview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84917/fdfd62be-c9b9-21bf-cf3c-df4c679574e5.png)編集モード?削除?並び替え?って感じの人はこちらの記事を見ると理解できるかと思います。
# 画像を変更する
:warning:**この方法は`UITableView`の編集モードで複数選択が可能な場合にのみ正常に動作します**:warning:
:warning:**`ta
Objective-Cでの三項演算子
#三項演算子ブーム
iOSを書いていると三項演算子ブームがやってきませんでしょうか?変数に入れたい値がnilだったら代わりのテキストを入れるというものです。
Objective-Cだとこう書きます。
“`
NSString *str = nil;
NSString *string = str ? str: @”nilだったので代入”;
“`変数が複雑になるとちょっと書きづらいですが、基本的な構造は一緒なので落ち着いて書きましょう。
Objective-Cで文字列の連結方法
# Swiftの記事ばかり
iOSアプリを作るときは基本的にSwiftを使いますが、仕事によってはオブCも使わざるを得ません。
そこで使い方を調べるとなかなか調べるのが困難だったりします。
たかが文字列の連結も、Swiftなら“`swift
var str1 = “ハンバーグ”
var str2 = “師匠”var str = str1 + str2
print(str) // “ハンバーグ師匠”
“`と書けばいいのに、オブCだと
“`objective_c
NSString *str1 = @”ハンバーグ”;
NSString *str2 = @”師匠”;NSString *str = [NSString stringWithFormat:@”%@%@”,str1, str2];
“`という書き方をしないといけません。
%@は繋げたいテキストの数だけ書きましょう。今回は2回記入です。
#追記:他の記法
“`objcNSString *str = [str1 stringByAppendingString:str2];
“`
や“`o
Bitriseで「could not get icons for app」のエラーが出るときの解決法
# 問題
BitriseにSwiftUIのプロジェクトを新規追加しようとした時に、`「could not get icons for app: /bitrise/src/{ProjectName}/{ProjectName}.xcodeproj, error: not found app icon set (AppIcon) on paths: [{18BEF98823E125EA005ED009 Preview Assets.xcassets} {18BEF98523E125EA005ED009 Assets.xcassets}]」`というエラーが発生する。# 原因
SwiftUIのプロジェクトでは、プロジェクトディレクトリの中にPreviewContent/Preview Assets.xcassetsというアセットディレクトリが存在するが、この中身が空のためにBitriseのプロジェクトスキャンのパースでエラーを吐いているようす。(Bitrise内部挙動はわからないのでエラー内容からの推測です)# 解決法
1. Assets.xcassetsに空のAppIconのアセット
GAS WebAppをAPIサーバーとして、iOSから直接スプレッドシートのデータを取得する
# 初めに
この投稿ではRPA開発として、以下のユースケースの掛け合わせを想定しています。
– スプレッドシートをGAS(Google App Script)から操作したい
– GASのウェブアプリケーション機能をAPIサーバーとして、iOSアプリから直接リクエストしたいわざわざ直接iOSからGASへリクエストしなくても、ExtensionAPIのiOS版や、GASでFirebaseやDynamoDBに書き出した後にmBaaSとして、データをリクエストする方がiOSアプリの品質として良いことは間違いありません。
ただRPAの出面としてiOSアプリを採用する一連として紹介します。# スプレッドシート
今回例で用いるスプレッドシートは、私が普段頭を悩ませている、ウェアラブルデバイスでセンシング出来るセンサーデータの一覧です。
以下の画像のD,E,F,G,H列を用いて、**理解度測定の確認テストを行うためのアプリ** を作成することを想定します。## はじめに
UIKitではiOS11からUIViewの一部だけを簡単に角丸にすることができるAPIが提供されました。
これをSwiftUIでも同じように利用しようとすると、標準のAPIでは実現できないことがわかります。本記事では、UIKitと同じようなインターフェースで、
SwiftUIのViewの一部だけを角丸にする方法をご紹介します。※ 最終的にはこんな感じで使えるようになります
“`swift
Rectangle()
.cornerRadius(12, maskedCorners: [.layerMinXMinYCorner, .layerMinXMaxYCorner])
“`サンプルコードは以下に置いております。
https://github.com/chocoyama/PartlyRoundedCornerView## UIKitでの一部のみ角丸処理
UIKitではCALayerに以下のプロパティが用意されています。“`swift
@available(iOS 11.0, *)
open var maskedCorners: CACor
iOSのショートカットでGoogleカレンダーに予定を新規登録する
# はじめに
いつも予定を忘れてしまうので、Googleカレンダーに予定を登録しておきたい。
ただし、ブラウザやGoogleカレンダーアプリを手動で起動して、予定の新規登録画面を開くのは煩わしいので、できるだけ簡単に登録したい。# 方法1
最近では、ブラウザのアドレスバーに[cal.new](https://cal.new)と入力すれば、新規登録画面を開くことができます。
そのため、iOSのショートカットアプリで上記のURLを開くだけで、簡単に新規登録画面を開くことはできます。ただし、PC画面が開いてしまい、モバイル端末では入力するのが煩わしいです。# 方法2
GoogleカレンダーのURLスキームを使って、アプリの新規登録画面を開きます。この方法だと、直接アプリが起動するため、方法1と比べて入力は煩わしくないかと思います。
新規登録画面を開くURLスキームは以下の通りです。タイトルと概要はアプリからも入力できますが、今回はショートカット側から入力させます。
“`
com.google.calendar://?action=create&title={タイトル}&d
[Swift] Alamofire+RxSwiftでUpload APIクライアントを作る
# はじめに
**アプリ内に画像のアップロード機能を実装したことがあるでしょうか?**
だいぶ前に書いた「[Alamofire+RxSwift+CodableでAPIクライアントを作る](https://qiita.com/H_Crane/items/d2d316b086745417ffae)」において、
**アップロードのクライアント**に関しては、触れただけで説明していませんでした。というわけで、実際に作る必要に迫られたので、せっかくなので延長としてここにまとめておきます。
# 導入
## 1. 準備
「[Alamofire+RxSwift+CodableでAPIクライアントを作る](https://qiita.com/H_Crane/items/d2d316b086745417ffae)」の記事内で行なっている
“`
1. ライブラリのインストール
2. ネットワークプロトコルの作成
“`上記までを必ず行なってください。
(次の手順と続いているため)## 2. Upload Request用のProtocolを作成
**「1. 準備」**が完了し
[iOS] Host Applicationを無効化してユニットテストを爆速化する
# はじめに
iOSアプリ開発において、テスト駆動開発(TDD)を採用していたり、ユニットテストを部分的に採用しているプロジェクトではユニットテストの実行速度が生産性に大きく影響します。
本記事ではHost Applicationを無効化してユニットテストの実行時間を短縮するためのTipsをご紹介します。
# ユニットテストの実行プロセス
ユニットテストの主な実行プロセスは以下のようになっています。
1. テストターゲットのビルド
2. シミュレータ起動
3. **テスト対象のアプリケーションの起動**
4. ユニットテスト実行テスト対象のアプリケーション起動には数十秒かかりますが、実はこのプロセスは省略することが可能です。
# アプリケーションの起動プロセスを省略する
ユニットテスト時にアプリケーションの起動プロセスを省略するには
– **テスト対象のコードのEmbededd Frameworkへの切り出し**と
– **Host Applicationの無効化**をする必要があります。
Embededd Frameworkへの切り出し方法は以下の記事が
iOSアプリの配布方法まとめ
### はじめに
調べていくといろんな配信方法があったのでまとめてみました。
### 丸腰
| 配布方法| 詳細 |
| — | — |
| 実機デバッグ(開発用配布) | 開発中のアプリを Mac と iOSデバイスを直接 USBで繋いで Xcode 経由でインストールする方法 |### Apple Developer Program $99/年
| 配布方法| 詳細 | 具体的なやり方 |
| — | — | — |
| Ad-Hoc(評価用配布) | 限られた数のユーザーのAppleデバイスに Appを直接インストールしてもらいテストする方法
iPhone (年間メンバーシップあたり100台)
iPad (年間メンバーシップあたり100台)
iPod touch (年間メンバーシップあたり100台)
App Storeを介すことなく、URLでアプリ配布が可能。
Apple Developer Plogram に登録していれば追加の費用はかからない。
デバイス追加の都度、UDID登録、プロビジョニングファイル
iOSアプリのDEBUGビルドを高速にしてみた
##はじめに
現在開発中のiOSアプリ、xcodeでnativeで作ってるんですが、ビルドが遅くて耐えられない。
ほんのちょっとの修正でもデバイスで実行されるまで40秒かかったりする。androidは大幅に修正してもせいぜい5秒程度なのに・・・。
くそが。androidStuido 3.5は超偉い。
##実行に移す
そこで結構面倒だけど、前から考えてた方法をやってみることにした。それは・・・。フレームワークをできるだけ外す。
以上。
・・・ではなんなので、具体的に説明すると、
– 空プロジェクト作って、ソース等全部ぶちこむ。しがらみが色々あるので、新規の方が苦労しなさそうなので。
– 開発に必要な最低限のフレームワークは追加する。
– DEBUGビルドのマクロに本番/開発の識別フラグを追加して、ソース上の、無いフレームワークが必要な箇所をコンパイルされないようにしたり。#if !xxflag/#endif ね。
– ほぼ空のダミークラスを、フレームワークのヘッダを元に作って、何もしないようにしたり。を全部やると、きっとできる。
開発中に必要なのまでやると、動
【iOS】APNS証明書登録手順 2020年版
# 概要
定期的にUIが変わってどれをどう選んで良いのか分からなく
なる場合もあるので2020年版の登録手順についてまとめました。# 登録手順
## 1. キーチェーンで証明書署名要求の作成
こちらは他にいっぱい記事があると思うので割愛。
## 2. iOS Dev Centerで作成
### Apple Push Notification service SSL (Sandbox & Production)を選ぶ
もはやここを書きたくて記事にしたと言っても過言ではない。
どれを選べば良いのか分からなかったのですが、こちらです。
![スクリーンショット 2020-01-27 11.57.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11800/1fd1d17d-188f-973e-6c34-0c3fb9368f36.png)### 対象となるApp IDを選択
![スクリーンショット_2020-01-27_11_57_43.png](https://qiita-image-sto
CoreNFCのFelica(NFC Type F)
#はじめに
[前回](https://qiita.com/HAL27241/items/a2e04cf1a6ade2f7d2af)までで一応、NFC Type F のリードまではできるようになっていました。
今回はちょっとだけ補足とまとめをしますね。#処理の流れ
##Session
まずは CoreNFC のセッションを作成します。“`swift
let session = NFCTagReaderSession(pollingOption: [.iso14443, .iso18092],
delegate: self)
session?.begin()
“`このとき、Type F 以外にも Type A/B も同時にスキャンしたい時はこんな感じになります。
もちろん、Type F だけで良い場合は `.iso18092` を指定すれば OK です。スキャンして NFC タグが見つかったら、デリゲートが呼び出されます。
Type A/B/F でスキャンしている場合は、TypeA/B と Type F
Swift(iOS)でイケてるトースト・バナー・ポップアップを導入する (SwiftEntryKit)
# SwiftEntryKit
トーストやポップアップ、プッシュ通知のようなビューを簡単に導入できるすごいライブラリ [SwiftEntryKit](https://github.com/huri000/SwiftEntryKit) をこの記事で紹介する。いくつか同様のライブラリ([Toast-Swift](https://github.com/scalessec/Toast-Swift)など)を試したが、SwiftEntryKitが圧倒的にイケてるUIUXを作れると感じた。イメージは以下の通り。
| Toasts | Notes | Floats | Popups |
| — | — | — | — |
| ![toasts_example](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122365/41fbd3bf-5e71-1eb4-982c-d52896800712.gif) | ![notes_example](https://qiita-image-store.s3.ap-nor
【香川県】App Storeのガイドラインに抵触しない「ゲーム依存症対策条例案」対応を実装してみた【Unity】
![タイトルなし3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55365/3f8fe2e6-9d10-511e-d1eb-9cdc8b5ac610.gif)
## はじめに
香川県議会による「**ネット・ゲーム依存症対策条例案**」が話題になっています。
これは18歳以下の子どもがネット・ゲーム依存状態になることを防ぐ目的で、ゲームのプレイ時間を平日は60分(休日は90分)までに制限する項目が盛り込まれています。
問題は、ゲームソフトを提供する事業者等に対しても上記の条例に対して協力する義務を課せられる可能性があります。可決されたら**令和2年4月1日より施行**されるため、開発者としては早急に今後必要な対策が気になるところです。
iOS, Androidアプリの強制アップデート(サーバーレス)
# はじめに
[文字列→塩基配列の相互変換ツールをつくってみた(アプリ版)](https://qiita.com/am10/items/3ecac20451c82133e900)でつくったアプリ* [Mac](https://apps.apple.com/jp/app/dna%E5%A4%89%E6%8F%9B/id1494127578?mt=12)
* [iOS](https://apps.apple.com/jp/app/id1493994947)
* [Android](https://play.google.com/store/apps/details?id=am10.dnaconverter)これに強制アップデート機能(半強制で抜け道あり)をつけてみました。
特に必要なわけではないですがこの記事([[iOS]アプリに強制アップデート機能を導入すべき理由と、簡単に実装する方法](https://qiita.com/kazu0620/items/f2f6c711c8800d127eb2))をみてやりたいと思い実装してみました。
が!!サーバーを用意するのはめんどくさい