iOS関連のことを調べてみた2020年01月30日

iOS関連のことを調べてみた2020年01月30日

Swiftのテキストフィールドで数字以外使えなくするやり方

今回はSwiftでテキストフィールドで数字以外使えなくするやり方を紹介します。

#コード

今回は数字は0から9の間の数字を対象とします。
textfiledのtextfiledメソッドの中に書きます。

スクリーンショット 2020-01-29 21.18.25.png

#動作

このコードを書いてからの動作は、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回記入です。

#追記:他の記法
“`objc

NSString *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列を用いて、**理解度測定の確認テストを行うためのアプリ** を作成することを想定します。

スクリーンショット 2020-01-28 23.38.20.png「一部だけ角丸にする」をSwiftUIで実現する

## はじめに
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日より施行**されるため、開発者としては早急に今後必要な対策が気になるところです。

スクリーンショット 2020-01-24 1.02.50.pngiOS, 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))をみてやりたいと思い実装してみました。

が!!サーバーを用意するのはめんどくさい

元記事を表示

OTHERカテゴリの最新記事