iOS関連のことを調べてみた2019年12月09日

iOS関連のことを調べてみた2019年12月09日

iOSのショートカットを使ってWebページのスクショを撮る

## 前提
この記事はペパボアドベントカレンダーの9日目の記事です。Gitについて何か書くと宣言していましたが、個人的に面白かったネタが降ってきたので急遽変更して、iOSのショートカットAppを使ってみた記事を書くことにしました。

## ショートカットAppって?
iOS13から標準搭載になったアプリです。iOSの挙動をある程度自動化できるスクリプトを組めます。今回はこれを使ってWebページのスクショを取って写真に保存する、ということをやっていきたいと思います。

### ショートカットAppの概要
ビジュアルな感じでスクリプトを組めるアプリです。
![IMG_1064.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116105/cc56cb4e-551f-f5f3-b6d1-70e63f9a38fa.png)
アクションと呼ばれるパーツを組み合わせていって、やりたいことを実現します。
基本的にアクションには入力と出力があり、入力をアクションによって変化させ出力にし、その出力を他のアクションの入力に渡

元記事を表示

iOS開発完全に理解したのその一歩先へ…

この記事は [CBcloud Advent Calendar 2019 4日目](https://qiita.com/advent-calendar/2019/cbcloud)の記事です。
おそらくiOS/Androidエンジニアとして、CBcloudに2019/5/1から参画しましたが、
なぜか今はPM業のようなことをやっているentakuです。(この話は後日書こうとおもいます。)
念のため言っておくと、今の働き方に満足しているので、その辺は問題ないのです。

# 0. 自己紹介
entakuです。経歴は下記のようになっています。
なんちゃってSE
->NWエンジニア[SIer]
->
サーバーサイドエンジニア[SIer] ・java/PHP..etc
->
iOS/Android アプリ開発[スタートアップ]
->
Vue / Android アプリ開発 @ CBCloud

 最近は「ユーザーを動かす開発者」でありたいなと思います。

直近ではiOS開発が好きで下記のような活動をしていました。

[一人iOSエンジニアでも気持ちよく開発できるiOSア

元記事を表示

プロパティやメソッドの並び順テンプレート(Swift)

## はじめに

SwiftLintには、クラスやプロパティなどの並び順を強制するルールがあります。

|ルール名|概要|
|:–|:–|
|file_types_order|ファイル内の型の並び順を強制する|
|type_contents_order|型内のプロパティやメソッドの並び順を強制する|

これらのルールを適用することで、必然的にコードが整理されて可読性が上がります。

しかし、並ぶ順を覚えるのは大変です。
ぱっと見でどこに何を書けば(書いてあるか)わかるよう、テンプレートを作成しました。

ルールの例からほぼ変えていないので、公式を見るだけでもいいと思います。
https://github.com/realm/SwiftLint/blob/0.38.0/Rules.md#file-types-order
https://github.com/realm/SwiftLint/blob/0.38.0/Rules.md#type-contents-order

## 自分ルール

同じグループの場合、アクセス修飾子の大きいものから順に書きます。
( `open` → `pu

元記事を表示

Bitrise CLIでiOSターゲットのUnityプロジェクトをアーカイブ

# はじめに
こんにちわ、 @kiy0p0n です。
[Diverse Advent Calendar 2019](https://qiita.com/advent-calendar/2019/diverse)の9日目の記事です。

# 前書き
今回はUnityでモバイルゲーム開発の際のCIについての話題です。
JenkinsでiOS/Androidのデプロイを自動化する記事はたくさんあるのですが、サーバーレスでスクリプトを書かずとも手軽にCI始めたいなと思った際に、bitriseでiOS/Androidのデプロイを自動化できるのでは?
ということをちょっと調べて実際にやってみた内容を今回は記事としてまとめました。

# やったこと
bitrise CLIを用いてiOSターゲットのUnityプロジェクトのビルド ~ ipa生成

## 環境
| env | version |
|:-:|:-:|
| OS | macOS Catalina(10.15.1) |
| bitrise CLI | 1.36.0 |
| unity | 2019.1 |
| xcode | 11.2 |

元記事を表示

UIButtonをaddSubViewする時はsuperviewを適切に選択すべし(戒め)

# ある日のこと……
画像の上にボタンを置いて、ボタンタップ時に処理を追加しようとした。

## 作りたいもの
### 完成図
![Simulator Screen Shot – iPhone 11 Pro Max – 2019-12-08 at 20.50.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149055/68cbb2d1-9656-6e05-ae52-4f18127da3b3.png)

## 早速作ってみる
### コードを書いた
これで完了!……と思うじゃん?

“`ViewController.swift
import UIKit

final class ViewController: UIViewController {
private lazy var imageView: UIImageView = {
let imageView = UIImageView()
// 本当は画像を置いていたのだが、サンプル用のコードなのでbac

元記事を表示

漫画のセリフ画像を共有できるアプリを作ってみた

この記事は[個人開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/private-development) 8日目の記事です。

## 概要
[漫画のセリフ画像を共有できるアプリ](https://apps.apple.com/jp/app/%E6%BC%AB%E7%94%BB%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97/id1326447543)を作ってみたので、サーバ側の構成等も含めて紹介したいと思います。

## 機能
作品名やキーワード検索から漫画のセリフ画像を選択し、共有ボタンからコピペ or 直接LINE等の外部アプリを開いて送るだけです。

Screen Shot 2019-10-14 at 17.30.40.pngSwiftで可変のラベルが入ったスクロールビューの高さをAutoLayoutで調整する

##やりたいことの概要
1画面では収まり切らないとても長い文章を表示するときに、UIScrollViewは便利です。しかしその文章の長さを後で変えたり、異なるデバイスで見る際は、UILabelの高さを明確に決められません。

自分が作成したマッチングアプリの利用規約を載せるときに、この問題にあたりました。最初は大きめに高さを確保する方法を採用しましたが、最後までスクロールしたときに謎な空白ができてしまいます。

今回はコードによるオートレイアウトのみで、scrollViewのcontentSizeを最適化する方法をまとめます。

##コード

“`Rule.swift
import Foundation
import UIKit

class RuleView: UIView {

let scrollView = UIScrollView()
let label = UILabel()

required override init(frame:CGRect){
super.init(frame:frame)

元記事を表示

【Objective-C】コード上からボタンを追加する。

objective-cにおいて、画面にボタンを追加する場合、storybordから追加することができる。

しかし、動作などを追加する場合storybordとコードをつなげる必要があり、
ボタンを多く追加すると個人的には見づらくなってくる。

できれば、コードだけで確認がしたいため、
今回は、コード上からボタンを追加する方法についてまとめてみようと思います。

#ボタンの設定
UIButton をコード上で使用することで、ボタンを追加することができます。
追加する時に、各状態になった場合のボタンのタイトル、色などを指定することができます。

“`
//ボタンの宣言
UIButton *button = [[UIButton alloc]init];

//タイトル・テキスト色・画像 通常
[button setTitle:@”ボタン” forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

元記事を表示

[swift5]iOSアプリで位置情報取得機能を実装

現在いる位置情報をラベルに反映するアプリの実装方法を紹介します!

ここでは、”常に位置情報を取得しない”実装にします。
“常に位置情報を取得する”ものについては別途記載します。(作成が完了したらここにリンクを追加します・・・)

##アプリの概要

### デフォルト

緯度と経度を表示するラベルに「デフォルト」と表示されています。

|![default_location.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/f82b2318-1590-4fdc-10fc-10b3fa87d9bf.png)|
|:-:|

### 位置情報を取得ボタン押下時

緯度と経度を表示するラベルに、位置情報が表示されます。
(画像は、シュミレータにて位置情報を東京に設定しています。)

|![tokyo_location.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/bee40c9b-b294-69f1-

元記事を表示

SwiftLintで追加・変更・廃止されたルールまとめ(Swift 4.2→5.1.2版)

## はじめに

[SwiftLintの全ルール一覧(Swift 4.2版) – Qiita](https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed) から2019/12/08現在の最新版までの間に、追加・変更・廃止されたルールを解説します。

前回の記事を読んでいなくても読み進められますが、併せて読むことをオススメします。

## 比較方法

以下の2ファイルを比較し、差分を翻訳しました。
https://github.com/realm/SwiftLint/blob/0.30.1/Rules.md
https://github.com/realm/SwiftLint/blob/0.38.0/Rules.md

|ルール|数|
|:–|:–|
|追加|21|
|変更|5|
|廃止|1|

※ソースでなくドキュメントを比較して調査したため、実際の数と異なる可能性があります。

## 環境

– Swift:5.1.2
– Xcode:11.2.1 (11B500)
– SwiftLint:0.38.0

## 追加されたルール

##

元記事を表示

RxSwift で値を非同期で得るときに Loading を簡単に扱えるようにする Extension

## 概要

例えば以下のようなコードが合ったとします.

“`swift

// 例えば Model 層にこんなコードがあって

/// fetchContent を呼び出したあとしばらくすると非同期で content が得られる.
var content = Observable
func fetchContent()

/// ViewModel 側で使う.

content.subscribe(/*なんか表示*/).disposed(by: disposeBag)

“`

ここで ViewModel 側で content の Loading の状態を扱いたくなったとします.

“`swift
content.subscribe(/*なんか表示*/).disposed(by: disposeBag)
loading.subscribe(/*ローディング表示*/).disposed(by: disposeBag) // こうしたくなった
“`

そんなときは以下のようにする場合があると思います.

“`swift
// 1. loading を監視する

元記事を表示

App StoreのレビューをGASを使って毎日Slackに通知する

# 概要
毎日Slackに「前日に投稿されたApp Storeのレビュー」を投稿するBotを作成しました!
GoogleAppScriptで動かせるため、非エンジニアの方でもどなたでも簡単に利用することができます。
また、GASを使っているのでおまけ程度にスプレッドシートに記録もされます。
スクリーンショット 2019-12-07 20.03.55.png
スクリーンショット 2019-12-07 20.29.36.png

# 使用方法
1

元記事を表示

[swift5]iOSアプリで地図機能を実装

緯度・経度、縮尺を設定した地図を実装する方法を紹介します!
![map_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/74ac974e-f3e6-6a3c-307b-15b4e35f6364.jpeg)

## 動作環境

| 対象 | バージョン |
|—|—|
| iOS | 13.1.2 |
| macOS | Catalina 10.15.1 |
| Xcode | 11.2.1 |
| Swift | 5.1.2 |

## 地図を表示

まずは、画面上に地図を表示します。
ここが完了すると、緯度・経度や縮尺を設定しないため、日本地図がすっぽりはまったような地図が表示されます。

![map2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/f633d8b4-2117-a508-0824-5a8fce8ac8a2.jpeg)

### ファイル作成

– Storyboar

元記事を表示

Xcode11 での動画再生と Playback Controls について

この記事は [ZOZOテクノロジーズ #1 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zozo_tech) 8日目の記事になります。

昨日の記事は @calorie さんによる「[Firebaseを使ったTwitter認証をクライアント(Swift)からサーバ(Rails)までまるっと実装する](https://qiita.com/calorie/items/6af9c1642ff344a5cf74)」でした。Firebase を使った認証をクライアントからサーバーまで通して解説してあり、初心者でも非常に分かりやすいと思いますので、ぜひご覧ください。

#はじめに
アプリで何かの動画を再生させよう!という話になった時、こんな質問を受けます。

デザイナー:「シークバーって表示できる?」
    私:「システム標準のやつならすぐできますよ」
デザイナー:「標準のやつってどんなの?」
    私:「えーと・・・」

と言いながら、毎回スクリーンショットを探しても、最新のものがなかなか見つかりません。結局サンプ

元記事を表示

WKWebViewでリダイレクト中のCookieを扱う

## WKWebViewでCookieを扱うことについて
例えば、アプリ内のWebViewからWebページにアクセスした際にログイン状態を維持したい時にはWebView通信時にCookieを乗せることで可能になりますが、UIWebViewからWKWebViewに乗り換えた際にリダイレクトにSet-Cookieがつく場合、次のRequestにCookieが乗らず、正常に通信できない問題があったので、色々試行錯誤した結果を書きました。

### リダイレクトにSet-Cookie有(問題のケース)
リダイレクトにSet-Cookieがある場合、次のリクエストにCookieは乗りません。

1. 302(リダイレクト(Set-Cookie=Hoge1)
**302にSet-Cookieされたものは次のリクエストには乗らない**
2. Next Request(Cookie=””)

### リダイレクトにSet-Cookie無(大丈夫なケース)
リダイレクトにSet-Cookieがない場合には次のリクエストにCookieが乗ります。

1. 302(リダイレクト)
2. 200(Set-Co

元記事を表示

[iOS] シェアシート上のプレビューをあるべき姿に

![ezgif.com-gif-maker4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31285/78751c55-9733-a6a2-6a5e-2424b4bbfb75.gif)

iOS13 からシェアシートが変わりましたね。変化の一つとして、シェアするアイテムのプレビューが追加されています。素晴らしい機能です。
その一方で、アプリ開発者にとっては新たな刺客ともいえるでしょう。

このプレビューは開発者が望む望まないに関わらず表示されます。しかも、何も対策をしないとユーザにとって違和感のある表示になってしまうことがあります。

この記事では、UIActivityViewController を用いたシェア画面上のプレビューを操作・カスタマイズする方法を紹介します[^1]。プレビューは一見奇妙な動きをしますし実装に関する情報も少ないのですが、ここで紹介する 2 つのポイントを把握しておけば簡単に扱えるようになります。

[^1]: この記事は[potatotips #66 (iOS/Androi

元記事を表示

subview.frame = view.bounds よりも良い書き方

## TL;DR
“`swift
subview.frame = CGRect(origin: .zero, size: view.bounds.size)
“`
と書く方が良い。

## 本文

あるUIViewに別のUIViewを同じサイズにして乗せたいケースはよくあると思います。
その際にframeの指定をどのように行うのかの選択肢があり、現場のコードでもいくつかの種類を見かけます。
`~.frame = view.frame` だったり `~.frame = view.bounds` だったり…

`view.bounds` を用いることが多いと思いますし自分もうそう書いていたのですが、改めてどのような指定方法が良いのか考えみようと思います。

## sizeの指定にはframeではなくboundsを使う

frameは親viewの座標系における自分の場所を示すものであるのに対して、boundsは自分自身の座標系が基準となっています。

例えば以下のように子viewをtransformで回転させると、frameとboundsのsizeは違う値になります。

元記事を表示

BitriseのAutoProvisionと戦った話

この記事は豊田高専コンピュータ部アドベントカレンダー8日目の記事です

## iOSアプリを自動でデプロイしたい
BitriseでiOSアプリのCI/CDを回そうとしたとき、iOSアプリ特有のProvisioningをBitriseが自動で行ってくれるAutoProvisionで躓いたのでその備忘録にしたいと思います。

## 前提条件
– すでにBitriseにiOSアプリを設定している
– あとはProvisioning通してBuildするだけ
– Apple Developer Programに登録済みである

## やったこと
これは初心者が試行錯誤の末動いたやり方なので足りなかったり多かったりした場合はコメントで指摘してもらえると助かります。

### BitriseのアカウントにApple Developerアカウントを紐付ける
これ、割と忘れがちな気がするのですが(自分がそうだった)あまり他の記事ではちゃんと書かれていなかった気がするので忘れずにやっておきましょう。

右上のアイコンからAccount settingsを選んで左側のConnected Accoun

元記事を表示

[Swift] Combineを使ってMVVMでNotificationCenterを実装する

# はじめに
ありがたいことにiOS13以上の案件に携わり、Combineを書く機会があったので備忘録的に残そうと。

記事を書いているうちにNotificationCenterよりもMVVMの話がメインになってしまった気がする、、笑
(普段から “RxSwift“ + “MVVM“ に慣れている人にとってもはつまらない記事かもしれません、、)

# NotificationCenterの実装比較

Combineの実装を見る前に、“通常“ / “RxSwift“ / “Combine“でのコード比較をさらっとしていきたいと思います。

## 1. NotificationCenter

画面回転の通知を受け取るためのNotificationを例にしています。

“`.swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

NotificationCenter.default.addObserver(self, selector:

元記事を表示

絶対に起きられるアラームアプリを作る

こんにちは。
この記事はクソアプリ [Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kuso-app) の8日目の記事です。

# どうしても起きたい

この地球という星で活動していると、何度か **絶対に起きないといけない日** という日が来ます。
これが実に厄介でして、私のようなスロースターターの人間には非常に困るわけです。

地球には目覚まし時計というテクノロジーが存在し、休眠状態の人間を設定した時刻に起床させることが出来ます。
しかしこれには致命的な不具合が存在し、一旦起床させた後に再び休眠状態へ陥る、いわゆる **二度寝** が発生してしまうわけです。

今回の目的は **二度寝をさせないアラームアプリ** を作成します。

# アラーム
今回はiOSアプリとして制作します。やはりアラームは携帯で設定する人が多いですからね。
せっかくなので噂のSwiftUIを使いましょう。
こんな感じで、UIをSwiftのコードで記述できます。

スクリーンショット </p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>iOS</div>
<div class='tag-cloud-link'>Swift</div>
<div class='tag-cloud-link'>SwiftUI</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/hal_cha_n/items/c0611578625ee14682cd'>元記事を表示</a></div>
</div>
      </section>
	        
      
      
      
	        <!-- 記事下シェアボタン -->
        <aside>
<ul class=

  • OTHERカテゴリの最新記事