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

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

【Swift】Realm DatabaseでのDB操作方法について

iOSのアプリ開発時に設定画面で使用したRealmについてまとめました。

# Realm Database
Realm Databaseは、SQLiteと違いSQL文は使用せずにデータの追加等を行います。
Realm Databaseを使用する場合、DB用にファイルを作成しデータの追加等を行います

# DBの作成
Objectを継承させて、カラムを追加します。
カラムの追加には初期値の入力が必要になります。

“`swift:RealmDB.swift
import UIKit
import RealmSwift

//Relam
class GPSConfig: Object {

//Int型
@objc dynamic var column1 = 0
//String型
@objc dynamic var column2 = “”

}
“`

# データの追加
realm.add(RealmDB(value: object)) でDBにデータを追加できます。

“`swift
let realm = try! Realm()

元記事を表示

SwiftUI で UITextField を使ってマークされたテキストを無視する

iOSアプリ開発中に SwiftUI の TextField で日本語入力したときに、テキストがうまく入力できない場合があって困りました。
とりあえず、UITextField で回避する方法を書いておきます。

## 準備

– Xcode 11.5

## UITextField と代用する

`SwiftUI.TextField` の入力がおかしいときは、マークされたテキストのときに起こっているようだったので、そのときの入力だけ無視するように UITextField を代わりに使って実装します。
※ マークされたテキストは、日本語のような `multistage text input` のときに起きるそうです。

– https://developer.apple.com/documentation/uikit/uitextinput/1614489-markedtextrange

UITextField を UIViewRepresentableでラップしつつ、SwiftUI.TextField と同じようなインターフェイスが取れるようにしてます。

“`swift
im

元記事を表示

[Swift] アプリ内でSafariを開く方法

##完成形
###pageSheet(iOS13以降の画面遷移の標準)
![ezgif.com-video-to-gif (4).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/18bfe489-8acb-3eff-b795-7ad49e93c723.gif)

###フルスクリーン
![ezgif.com-video-to-gif (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/1053152d-ea73-cdb3-f0d0-8cdaf7bb2624.gif)

##コード
“`Swift:ViewController
import UIKit
import SafariServices
class ViewController: UIViewController {

override func viewDidLoad() {
super.viewD

元記事を表示

FlutterアプリでonResume的なタイミングの処理をする/複数ウィジェットで監視編

Flutterアプリで、Androidでいう`onResume`のタイミング(アプリがホームボタンなどでバックグラウンドに行ってまた前面に戻ったとき)で処理をしたいと思い、以下の記事を書きました。

FlutterアプリでonResume的なタイミングの処理をする
https://qiita.com/kasa_le/items/1fdbe07112ab4aed250a

しかし、複数のウィジェットで同時多発的に監視したいときに、この方法では問題がありました。
関数名を見て貰えれば分かりますが、`set***`なので、**最後にセットしたコールバックしか呼ばれません。**

ということで、対処法を調べたのでそのまとめです。

# 環境など

|ツールなど|バージョンなど|
|:–|:–|
| MacBook Air Early2015|macOS Mojave 10.14.6|
|Android Studio |3.6.1|
|Java |1.8.0_131|
|Flutter|1.12.13+hotfix.9|
|Dart |2.7.2|
|Xcode |11.3.1|

# 解決

元記事を表示

[Swift] クロージャ(Closures)を理解してみよう

まとめたものを共有します。
環境は以下の通りです
Swift 5.1
Xcode 11.3

# クロージャの携帯
{(パラメータリスト) → リターン型 `in` 実行するコード}
何も印字で受け取らず、何も返さないクローザーは `( ) → ( )` です。

# Swiftの関数はクロージャ!

Swiftの関数はクロージャです。
これは、関数の本体内のスコープ内の外部変数への参照をキャプチャできることを意味する。

例えば、下のドグのインスタンスを参照してみよう。
スクリーンショット 2020-06-06 12.29.21.png
参照がその`whatThisDogSays`にどうなるのか見てみましょう。

スクリーンショット 2020-06-06 12</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Xcode</div>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>まとめ</div>
<div class='tag-cloud-link'>Swift</div>
<div class='tag-cloud-link'>学習</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/wnstjd0333/items/7bcbf9c8fc2a05c0a47e'>元記事を表示</a></div>
<h3 id=UIButtonの枠線色を動的なUserInterfaceStyleの切り替えに対応させる

# 環境
– Xcode 11.5
– Swift 5.2.4
– iOS 13.0~

# 前口上
表題ではUIButtonとしていますが、UIColorで設定されているtextColorとの比較ができるのでUIButtonを用いているだけで、`UITraitEnvironment`を継承している`UIView`や`UIViewController`で対応可能です。
あと動的という表現が適切かどうかはわかりません。

# 問題点
UIButtonの枠線に色を設定するために、 `layer.borderColor`にCGColorを設定します。
※比較のため、textColorとborderColorには同一のUIColorを用います。

“`Swift
button.titleLabel?.textColor = UIColor.label // UIColor
button.layer.borderColor = UIColor.label.cgColor // CGColor
“`

しかし、上記の設定だけではUIButtonが**生成された後**、

`UserInter

元記事を表示

AndroidStudioでiOSのinfo.plistを編集する

わざわざXcodeを起動して編集するの面倒だなと思っていたら、AndroidStudioの以下ファイルを編集することで設定を反映させることができた。

ios/Runner/Info.plist

“`Info.plist.yaml



…略

io.flutter.embedded_views_preview

“`
今回はwebViewの設定を追加
keyの下に設定する値を記述。書き方はファイル内を参考すればわかるので割愛

元記事を表示

こんなソースコードはイヤだ-ifの分岐で数を数えないで

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# ifの分岐で数を数えないで

“`sample.swift
var count = 0
if (self.existsApple) {
count += 1
}
if (self.existsGrape) {
count += 1
}
if (self.existsOrange) {
count += 1
}
print(count)
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/dont_use_if_for_count)

元記事を表示

iOS Safariのoverflow:scroll内の要素でtransitionendが発生すると、バウンススクロールがキャンセルされる

iOSのOverflow:hiddenを持った要素内スクロールで問題が発生。
iOS safariでは、スクロールが末端でバウンスするエフェクト(ぼよよーんって感じの表現)がかかる。つまり一時的にスクロール可能最大量以上のスクロールがされた状態がユーザーに見える。
ところで、要素内でtransitionendイベントが発生すると、このバウンスが一時的にキャンセルされるのか、スクロール可能量以上のスクロール状態ではなくなる。

結果として、連続的にtransitionendが発生するような演出を入れていた場合(スクロール要素内の要素が次々とスライドインするような演出)、
バウンススクロールが連続的に強制的にスクロール可能最大量にリセットされ、震えているように見える。

効果的な対処法はちょっと思いつかない。
スライドインする要素が全部出現終わるまでは、javaScriptで強制的にバウンススクロール時のスクロールイベントをキャンセルするなどした。ただこれも十全ではない。

元記事を表示

iOSのURLスキームの脆弱性について

# 概要

iOSのURLスキームが意外と脆弱だから気をつけた方が良いよと言う話をします。

※違うよ、とかあれば気軽にコメント頂ければ幸いです
※すみません、間違って一度記事を削除してしまいました。。orz もう一度再掲します

# iOSのURLスキームについて

下記のようにURLスキームを叩くことがあると思うのですが、

“`
hoge://〜
“`

これってどの情報を元にどのアプリがこのURLスキームを受けるか決めているのでしょうか。

答えとしては、どのアプリが受け取ると言う情報が入っている訳ではありません。

なので

AアプリとBアプリでそれぞれ同じプロトコル名で受け取るようにしていた場合、どちらがそのURLスキームを受け取るかわかりません
(過去に確認した挙動だと、先にインストールされている方のアプリが受け取るようです)

Aアプリ

“`
hoge://〜
を受け取るように実装
“`

Bアプリ

“`
hoge://〜
を受け取るように実装
“`

奪い取りたいURLスキームのプロトコルなんて他の人わ

元記事を表示

iOSのバックグラウンド状態でできることを簡易的にまとめる

## Audio, Airplay, and Picture in Picture
音の再生・AirPlay(音楽を再生するなど)

## Location updates
位置情報更新

https://qiita.com/SatoTakeshiX/items/a7039b9a1691d05d10da

– significant-change location service
完全にアプリを閉じてる状態でも更新できる
https://developers.cyberagent.co.jp/blog/archives/771/

## Voice over IP
通話, VoIP用のプッシュ通知
VoIPプッシュは高優先度かつ遅延なく配送されるとみなされる
https://qiita.com/mgkdev/items/303b9015fabca4eb7fb7

端末がロックした状態で着信に応答すると、CallKitの通話画面が表示されたままになります。この状態では、アプリ側の画面が表示されないためビデオが表示されません。ユーザーがロックを解除するとアプリの画面に切り替わりま

元記事を表示

【超基本】カウントアップで学ぶ②AVFoundationで効果音をつける。

## はじめに
本記事はプログラミング初学者の筆者が、備忘録として作成した記事であり、興味本位で試してみたい機能についてのメモである。

前回の続きです。
[【超基本】カウントアップで学ぶ①if文](https://qiita.com/mashishift/items/a6fcc79e845d5cc1f2a8)
## ゴール
・AVFoundationを用いて、アプリに効果音を付ける。

##内容
・前回作成したカウントアップアプリに効果音を付ける。
・AVFoundationを用いて、Labelが”7″の時にハッピーな効果音を流す。
・↑と同時にimageViewに”犬”の画像を表示し、”祝福の言葉”をLabelに表示させる。

##完成:Simulator画像
・”7″の時、効果音が鳴る。
・犬に祝ってもらう。
Simulator Screen Shot - iPhone SE (2nd generation) - 2020-06-05 at 16.07.05.pngこんなソースコードはイヤだ-関数の使用者に余計なことをさせない

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# 関数の使用者に余計なことをさせない

“`sample.swift
func printCountMessage(counts: [String]) {
print(counts.joined(separator: “,”))
}

let counts = [1, 2, 3]
printCountMessage(counts: count.map{ String($0) })
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/create_function_easy_to_use)

元記事を表示

【Pyto】スマホをPC用フリックキーボードにしてみた

![image2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549600/88220d07-4b7b-21a3-bb1e-a9808d179553.jpeg)

## はじめに

若者のPC離れと言われる中、タイピングができない人が多くなってきているそうです。しかし若者はPCが使えない代わりにスマホの扱いには慣れており、現在の女子高生のフリック入力はガラケーギャルもびっくりするほどの速さです。

それならPCの入力もフリックでやってしまえば良いのではないか、ということは以前から言われていたようですが、手軽に試せるソフトはありませんでした。

そこで、iOSでPythonプログラミングができる[Pyto](https://pyto.app/)というアプリを使って、フリックキーボードを作ってみました。

## 既存の製品
– [FlickTyper](http://flicktyper.com)
スマホとPCをこの装置で繋ぐとスマホがフリックキーボードになります。また、Bluetooth

元記事を表示

Application Development Guide for Android and iOS

The complete guide on how to create a mobile application, from defining the project goal and technology stack to testing and deployment. Check it out!

元記事を表示

How to attract more customers for your mobile app

How to promote a smartphone app, attract users, and earn an income? Check out the best mobile application marketing tools and strategies.

元記事を表示

Top 15 Apps Like Instagram for IOS and Android you need to know about

Though Instagram continues to be the leading photo-sharing app, it has strong competitors. Check out 15 Instagram-like apps to see their success formula.

元記事を表示

イテレータをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Iterator(イテレータ)

####0. イテレータの意義

複数の要素の集合について、全要素に対し順に同様の処理を行うデザインパターンをイテレータという。

Swiftではfor-inループなどで使うことが出来る。

Array型, Set型, Dictionary型などあらかじめ用意されている型はもちろんだが、カスタムタイプもSequenceプロトコルに対応させることでfor-inループで回すことができる。

今回はキューを実装した後、それをSequenceプロトコルに対応させfor-inループで回せるようにする。

####1. カスタムタイプ(キュー)の実装

キューとは、複数の要素を扱う型の一種でFirst-in Last-out(最初に追加した要素が最後に取り出される)が特徴の物を言う。

SwiftではUITableViewやUICollectionViewを使

元記事を表示

UIImageからGIFを生成する

個人開発アプリ[TweetFly](https://itunes.apple.com/app/id1515218388?mt=8)
複数枚の画像をGIFに変換する機能がありまして、ちょっと調べてまとめました。

下のGIFは`String` -> `UIImage` -> `GIF`に変換したサンプルです。
![sample_typewritter.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13219/38d5469d-38e2-91b1-5a22-bd365d50d3f5.gif)

“`swift

import UIKit
import ImageIO
import MobileCoreServices

class GIFCreator {

struct GIFFrame {
var image: UIImage
var duration: Float
}

static func create(with fram

元記事を表示

Unity IAPは公式APIドキュメントがないので課金処理は自前ネイティブ実装がいいかも

# まとめ
– https://docs.unity3d.com/Manual/UnityIAP.html
– マニュアルはある。しかしAPIについての最新の説明は存在しないので自己責任でやるしかない。
– 自分でネイティブ連携するのが最強

# 現状
– https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/
– Where Has Unity Iap Scripting Reference Gone?(Unity IAPのスクリプトリファレンスどこにやった?)

-https://forum.unity.com/threads/where-has-unity-iap-scripting-reference-gone.660454/#post-4543948

> Understood on the concern. As we are moving more towards Package Manager, we’ve had to adjust our doc

元記事を表示

OTHERカテゴリの最新記事