- 1. UISearchBarのキャンセルボタンをアニメーション付きで表示したい話
- 2. UITextFieldで文字を入力した後にキーボードをしまう方法
- 3. FirebaseのRemoteConfig使ってみた
- 4. SceneKitで環境マップ
- 5. houstonを使ってrailsサーバーからプッシュ通知を送る時に設定できる値のメモ、あと多言語対応
- 6. 【Swift】[weak self]付のクロージャに親スコープの変数を渡したい!!!
- 7. [swift5]iOSアプリでApp Groupsを実装
- 8. [swift5]iOSアプリでカメラ機能を実装
- 9. 【swift】画像のデータサイズを取得し、バリデーション を実装する
- 10. プロキシーパターンをSwift5で実装する
- 11. 【小ネタ】環境ごとにアプリアイコンを変更する方法【iOS】
- 12. 【swift】画像を指定した比率でトリミングする【TOCropViewController】
- 13. 【SwiftUI】@Environmentを支える機能
- 14. iOSアプリ、Adhoc配信でもプッシュ通知は飛ばせます!飛ばないときのトラブルシューティング
- 15. UIAlertController の title と message のパターン
- 16. UITableViewでセルを選択不可にする方法
- 17. signin with apple 実装するときの注意点まとめ
- 18. iOS Clean Architecture勉強会のまとめ
- 19. ダークモードとは何か?各OSの設定方法からiOS/Androidアプリの対応方法まで
- 20. Googleで検索結果に戻ったときの「他の人はこちらも検索」を非表示にする方法
UISearchBarのキャンセルボタンをアニメーション付きで表示したい話
UISearchBarをタップして編集状態中だけキャンセルボタンを表示したいと、
ちょびっと悩んだので備忘録として書いときます。# アニメーション無しの場合
showsCancelButtonを使うことで表示の制御はできますが、アニメーションはありません。
“`swift
searchBar.showsCancelButton = true
“`# アニメーション有りの場合
setShowsCancelButtonを使いましょう
“`swift
searchBar.setShowsCancelButton(true, animated: true)
“`# 実装例
コピペをこよなく愛する者たちへの贈り物です?
“`swift
import UIKitclass ViewController: UIViewController,UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
UITextFieldで文字を入力した後にキーボードをしまう方法
## 今回の記事を書く理由
初学者に多い気がしますが、UITextFieldで文字を入力した後、キーボードが勝手に閉じてくれないのでそのためのコードを書く必要があります。
意外と何回も調べていたりしていたためメモの代わりに書きます。
今回は説明を交えながら書いてきます。
## xcodeでreturnの文字を変更
まずxcodeでreturnの文字を変更することができます。
## ソースを追加
### 全体像
この後説明していきます。
“`swift
class ViewController : UIViewController, UITextFieldDelegate {
@IBOutlet var textFiel
FirebaseのRemoteConfig使ってみた
#はじめに
最近になってFirebaseのRemoteConfigを使う機会があったので、
このサイトに残しておこうかと思います。
ほぼ、ドキュメントに通りなので、
気になる方だけ読んでいただければと思います。
#RemoteConfigとは
アプリをアップデートすることなく、アプリの動作や外観を変更できる機能になります。
行なっている事としてはRemote Config Serverから設定されているパラメーターを取得して、
その値によって動作や外観を変更します。
[RemoteConfigとは](https://firebase.google.com/docs/remote-config?hl=ja)#環境
Xcode 11.3
swift 5
Firebase 6.15.0
#FireBaseのインストール
インストール手順は省きます。
以下、公式ドキュメント
[Firebase を iOS プロジェクトに追加する](https://firebase.google.com/docs/ios/setup?hl=ja)
#RemoteConfig設定
[Remote Config
SceneKitで環境マップ
“`objc
SCNScene *scene = [SCNScene sceneNamed:@”art.scnassets/my_scene.scn”];
// 背景に表示用
scene.background.contents = @[@”art.scnassets/px.png”, @”art.scnassets/nx.png”, @”art.scnassets/py.png”, @”art.scnassets/ny.png”, @”art.scnassets/pz.png”, @”art.scnassets/nz.png”];// ライティング用
scene.lightingEnvironment.contents = @[@”art.scnassets/px.png”, @”art.scnassets/nx.png”, @”art.scnassets/py.png”, @”art.scnassets/ny.png”, @”art.scnassets/pz.png”, @”art.scnassets/nz.png”];// モデル
SCNNode *m
houstonを使ってrailsサーバーからプッシュ通知を送る時に設定できる値のメモ、あと多言語対応
#1. 概要
“houston”というgemを使って、ruby on railsのサーバーからiOSアプリにプッシュ通知を送るようにしました。今回は本文・SE・バッジ数だけの一番シンプルな通知を実装しましたが、[GitHubのUsage](https://github.com/nomad/houston)を参照すると、通知データに対して他にも設定できる項目があるようです
将来細かい設定が必要になった時に忘れないように、調べたことを書いておきます。
#2. メモ
“`ruby:Usage.rb
require ‘houston’
# 定数の宣言はメソッド外でする
APN = Houston::Client.development
APN.certificate = File.read(‘/path/to/apple_push_notification.pem’)# 通知を送りたいデバイスのdevice tokenを代入
token = ‘
【Swift】[weak self]付のクロージャに親スコープの変数を渡したい!!!
小ネタです。
UI更新処理ってメインスレッドでやらないといけないので、
DispatchQueue.main.async {[weak self] in …… }の中に書くじゃないですか?
このときに、関数内のスコープを持った変数をクロージャに渡したい、ということがありました。“`swift
class ViewController {
func soramissionLoaded() {
var word = “これを渡したい”
DispatchQueue.main.async {[weak self] in
//どうしたらいい?
}
}
}
“`# 正解
先に正解を書くと、“`swift
class ViewController {
func soramissionLoaded() {
var word = “これを渡したい”
DispatchQueue.main.async {[weak self, word] in
[swift5]iOSアプリでApp Groupsを実装
アプリ間でのデータ共有を実装する方法を紹介します!
本ページでは、App Groups を利用します。## 動作環境
| 対象 | バージョン |
|—|—|
| iOS | 13.3 |
| macOS | Catalina 10.15.2 |
| Xcode | 11.3.1 |
| Swift | 5.1.3 |## データ共有機能(App Groups)の実装
アプリ間でデータを共有するため、アプリは2つ作成します。
1. データを表示・変更するアプリ
2. データを表示のみするアプリ1, 2 で同じデータを表示します。
## アプリの設定(2つのアプリ共通)
2つのアプリで設定してください。
1. 「Signing & Capabilities」から「App Groups」を追加する
2. グループ名を追加する### ファイル作成(2つのアプリ共通)
– Storyboard
– ここでは、”AppGroups.storyboard” とします
– ViewController.swift
– ここでは、”AppGroup
[swift5]iOSアプリでカメラ機能を実装
iPhoneに入っているカメラアプリのようなカメラを呼び出す機能を実装する方法を紹介します!
本ページでは、UIImagePickerController を利用します。自分でカスタマイズしたカメラを実装したい場合は、UIImagePickerController ではなく AVFoundation を利用する必要があります。
## 動作環境
| 対象 | バージョン |
|—|—|
| iOS | 13.3 |
| macOS | Catalina 10.15.2 |
| Xcode | 11.3.1 |
| Swift | 5.1.3 |## カメラ機能の実装
本ページでは、2画面用意します。
1. ボタンを用意します
2. ボタンを押下すると、カメラ画面に遷移します
3. 写真をとり、写真を利用を押下すると、写真が保存されはじめの画面に戻ります### Info.plistの修正
Info.plist に2つ項目を追加します。
– Privacy – Camera Usage Description
– カメラを呼び出すために追加する
– P
【swift】画像のデータサイズを取得し、バリデーション を実装する
#方法
“`swiftvar image:UIImage? = … //画像を読み込む
//
let imageData:Int = NSData(data: image.jpegData(compressionQuality: 1)!).count//※画像のデータサイズをKBで表示。
let dataToKB = Double(imageData) / 1000.0//バリデーションを実装。(10MB以下のみ保存可能)
if dataToKB < 10000.0 { print("画像を保存できます") //画像をimageViewに描写させたりする self.imageView.image = image } else { print("画像データが過大です。10MB以下可能です") } ``` #詳しく ##`jpegData(compressionQuality: CGFloat)` ```swift func jpegData(compressi
プロキシーパターンをSwift5で実装する
※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。
###The Proxy(プロクシ)
####0. プロクシの意義
ある特定のオブジェクトに直接アクセスさせず、間接的にアクセスするようにするパターンをプロクシパターンと言う(Proxyは代理というような意味)。
具体的には、
・ バーチャルプロクシ
・ リモートプロクシ
・ プロテクティブプロクシ
の三種がある。注意点は、プロクシを経由せずに直接目的のオブジェクトにアクセスできるような抜け道を用意してはならないという事である。それではプロクシパターンの意味がなくなってしまう。
####1. Virtual Proxy(バーチャルプロクシ)
オブジェクト生成にコストがかかる場合、その生成のタイミングを本当にオブジェクトが必要になるまで遅らせるパターンの事を言う。
Swiftでは、変数の前に`lazy`修飾詞をつける事で比較的簡単に実現できる。
“`swift:ImagePro
【小ネタ】環境ごとにアプリアイコンを変更する方法【iOS】
# モチベーション
「どれを確認すればよい?」
検証端末に複数の環境のアプリをいれて動作確認をするというのはよくある話だと思いますが、確認する役割の人や確認依頼者がわかりやすいようにする。– 確認者がアプリ名は分けているけど時々間違う
– 依頼者がスキーマ分けているのに時々間違うというようなことを防ぐ。
# 対象
– 開発フェーズがある程度進んでしまっている *1
– `Build Config`で環境分けはしている
– リソース管理ライブラリは使ってない
– `Assets.xcassets`ファイルでアイコン定義をしている対象がちょっと限られていますが、同時に付け加えられるなら可能です。
新規開発の場合はリソース管理系のライブラリの導入を検討した方が良いかと思います。*1 リソース管理ライブラリなどを適用するには総合的に現実的ではないという状況
# やりかた
1.`Assets.xcassets`に必要な環境のイメージセットを`New iOS APP icon`を選択し追加*New iOS App icon*
![スクリーンショット 2020-01-21
【swift】画像を指定した比率でトリミングする【TOCropViewController】
#使用するライブラリ
[TOCropViewController](https://github.com/TimOliver/TOCropViewController)
>ユーザーがUIImageオブジェクトの一部を切り取ることができるiOS用のView Controllerを提供します。#目標
1.ボタンをタップすると、`UIImagePickerController`が起動する。
2.トリミングしたい画像をpickし、`UIImagePicker`を閉じる。
3.配置した`UIImageView`と同じ大きさにトリミングできる`CropViewController`が起動する。
4.トリミングを完了すると、`UIImageView`にトリミング編集した画像が反映する。(実装例)
![20200121_214939.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376004/be1ec78e-1a6a-0489-444f-efef385feac5.gif)#サンプルコード
“`sw
【SwiftUI】@Environmentを支える機能
# 基本的な記法
“`swift:sample.swift
@Enviroment(.\accessibilityEnabled) var accessibilityEnabled
“`# 関数定義
“`swift:definition.swift
@propertyWrapper public struct Environment: DynamicProperty {
@inlinable public init(_ keyPath: KeyPath(
@inlinable public var wrappedValue: Value { get }
}
“`# なぜ `@Enviroment` のように書けるのか
Swift5.1で追加された@propertyWrapperというattributeを型に付けると、@Environmentのようにアノテーションぽい記述を行うことができます。このマークを付けると、値のget set する際にpropertyWrapperをつけた型を経
iOSアプリ、Adhoc配信でもプッシュ通知は飛ばせます!飛ばないときのトラブルシューティング
## はじめに
今回、社内用にAdhocでプッシュ通知を伴うアプリをリリースしました。
結構証明書周りや署名、ビルド方法などが難しく、「Adhocではできない」と書かれたブログ記事も多くあったため、
ここに確認すると幸せになれる項目を書きます。
結論としては、Adhocでもプッシュ通知飛ばせます。
順不同に並べるので、不安なところを参考にしていただけたら幸いです。## 前提
– サーバサイドからFCMへプッシュを投げて、iOSで通知を受け取る流れ
– すでにWebのプッシュ通知は実装済みで、サーバサイド→FCMへの連携はできている状態
– xcode Version 11.2.1
– enterprise apple developer program ではなく、apple developer program に登録しています## ビルドする target の内容をチェック
– TARGETS の Signing & Capabilities タブで、Background Modes の Remote notifications にチェックがついていること
– Push
UIAlertController の title と message のパターン
毎回 title と message のどっちを設定するとどうなるかを忘れるので表にしてみました
style = actionSheet のときに `title あり/message = nil` と `title = nil/message あり` のパターンで後者の方がフォントが太くなるあたりが見どころです
## UIAlertController.Style.alert
| | not empty message | empty message | nil message |
|:-:|:-:|:-:|:-:|
| not empty title |![alertTextText](https://raw.githubusercontent.com/funnything/AlertPattern/master/outputs/alertTextText.png)|![alertTextEmpty](https://raw.githubusercontent.com/funnything/AlertPattern/master/outputs/alertTextEmpty.p
UITableViewでセルを選択不可にする方法
## 環境
swift 5
xcode 11.32020年1月20日現在
## 動機
簡単なのですが、すぐに忘れてしまうので。
メモメモ
## 方法
selectionがNoneになっていれば選択することができなくなります。
![スクリーンショット 2020-01-20 21.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/f03b0929-a6fc-48bf-f0b8-5bb4a9ddaf73.png)
![スクリーンショット 2020-01-20 21.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270808/0ad2fec8-8581-53b7-516d-9ad5a3c5edbe.png)
## コードだと
コードだと以下のように書くようです。
“`swift
self.tableView.allowsSelection = false
“`
signin with apple 実装するときの注意点まとめ
# 対応バージョン
iOS13以上、iOS13以下は対応しないため、別々のデザイン準備する必要があります。
# 取得できるユーザーデータ
– ユーザーの選択でランダム生成されたメール渡せる可能性があります
– full name
– ユーザーの編集可能で、apple id登録された名前とは限らないhttps://developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential?language=objc
# sign in 初回と2回目の違い
sign in 初回はメールと名前のユーザーデータ取れますが、その以後sign inする場合は取得できなくなります。
初回取得成功後key chainなどに保存し、登録成功後削除したほうが一番無難。“` swift
let request = ASAuthorizationAppleIDProvider().createRequest()
request.reques
iOS Clean Architecture勉強会のまとめ
この文章は2020年1月21日に行われた「[iOS Clean Architecture勉強会 sponsored by Sansan](https://connpass.com/event/158269/)」という勉強会のまとめです。
# 発表内容
## yimajo: 「クリーンアーキテクチャとiOSアプリ開発のためのVIPERと」
– 依存関係逆転の原則(DIP)について
– VIPER
– VIPERの種類色々ある
– VIPERはDIPを使ってない
– DIPを使ってない場合の依存を取り除くには
– Interactorごと取り替える
– DBの構造をstructなどに置き換える### スライド
## dotrikun: 「ゼロイチフェーズからのClean Architecture」
– DeNAテックカンファレンスあります
– 新規アプリでクリーンアーキテク
ダークモードとは何か?各OSの設定方法からiOS/Androidアプリの対応方法まで
# はじめに
勉強会をご覧の皆さま
元々のテーマは「10分でわかるダークモード対応」でしたが、あちこち調べているうちにページ数が30を超えてしまい、「**10分ではわからないダークモード対応**」になりました?♂️
20分には収めます
—
# ダークモードとは?
OSシステムレベルで設定可能な、画面表示色の設定です。
![light_and_dark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277107/f057c91a-a01a-d235-7987-c1ff39a6d9f4.png)
Light Modeが従来通りの白基調な画面、**Dark Modeは黒基調な画面**です。—
# 何が明るく/暗くなるの?
特定の何に適用すべきという法則は無いようですが、**閲覧者に見せたいコンテンツ以外のウィンドウ枠、背景など**に対して適用されることが多いようです。
もちろん、メインコンテンツ(テキスト色など)も背景色に応じて調整する必要があります。
—
# ダークモ
Googleで検索結果に戻ったときの「他の人はこちらも検索」を非表示にする方法
Google の検索結果に戻ってきたとき、リンクの下に “他の人はこちらも検索” と表示されてリンクが動いてしまうのを防ぐ方法です。Chrome, Brave, Firefox, Safari に対応しています。ただしモバイル版では制約上不可能なようです。
ちなみに英語版では “People also search for” と表示されるようです。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155587/3a764b58-6f9f-f69e-6aa5-9f65175b397d.png)# Chrome / Brave
以下の拡張機能を追加するだけです。
[No Search For – Chrome ウェブストア
https://chrome.google.com/webstore/detail/no-search-for/gfilnngoaebchcnkmppbnijaakeccdjc](https://chrome.google.com/webstore/detail/no-search-fo