- 1. FirebaseにXcodeアプリを登録する
- 2. 関数定義で使用される”_”について
- 3. 【Swift】CocoaPodsでRealmをインストールする方法 & でもimportできない場合の対処法。
- 4. 【Swift】UITabBarControllerでアプリ起動時に指定したタブを表示する
- 5. [iOS][Swift]SnapKitをRxSwiftと連携する
- 6. PythonistaでiOSの写真に画像を追加する
- 7. 【意外と知らない】iOSアプリでのビルドコード
- 8. Combineフレームワーク リンク集
- 9. macOS Catalinaで fastlaneが動作しなくなった件 & 解決方法
- 10. Buttonのタイトル変更について
- 11. Swiftで予約語を変数名やCase名として使う
- 12. Firebase AuthenticationでTwitterのOAuthを利用し、Twitter APIにリクエストする
- 13. iOS10のサポートを切るときにやったこと
- 14. RxSwift + SPM + XCode11.2 + iOS 環境でビルドすると実行時にクラッシュする
- 15. Firebase Cloud MessagingをiOSアプリで利用したときのメモ
- 16. XcodeでDistribution時にentitlementsエラー
- 17. 画面遷移から戻るときに親ビューの画面を更新する方法
- 18. SwiftUIでプレビューがUnknown preview provider “ContentView_Previews”エラーとなる
- 19. SwiftUIとCoreDataを@FetchRequestで連携させる
- 20. URLからQRコードを生成する
FirebaseにXcodeアプリを登録する
**ここで、紹介する方法は2019/11/8の方法なので仕様が変わっている場合があります。**
#Firebaseの準備をする
まずは、[ここ](https://firebase.google.com/)からFirebaseにアクセスしてGoogleアカウントでログインする。
ログインが完了すると以下のような画面が出てくるので「プロジェクトの追加」を選択する。
すると、以下のような画面が出てくるのでプロジェクト名を決めて「プロジェクト名を入力します」という部分に入力する。(ここで入力する、プロジェクト名はXcode上と異なっていても良い)
関数定義で使用される”_”について## “_”は何のため?
swiftのプログラムを見ていると、たまに関数の引数名の左に”_”(アンダースコア)が書いてあるときがあります。“`swift:howToUseUnderscore
func howToUseUnderscore(_ number1: Int, _ number2: Int) {
print(number1 + number2)
}
“`引数名number1とnumber2の左に書かれている”_”は何を意味するのでしょうか、、、
## “_”で引数名を省略できる!
関数定義のとき、”_”を引数名の左に書くことで、関数を呼び出す際に引数名の記載を省略することができます。
– “_”を書かないとき
“`swift:howToUseUnderscore
func howToUseUnderscore(number1: Int, number2: Int) {
print(number1 + number2)
}howToUseUnderscore(number1: 1, number2: 2) // -> 3
“
【Swift】CocoaPodsでRealmをインストールする方法 & でもimportできない場合の対処法。
# はじめに
iOSの勉強をしている中で、データの管理をRealmにしてみようかなと思い、自分のプロジェクトにインストールしました。その際に困った部分があったので投稿させていただきました。同じ境遇の人の助けになりますようにと。podでRealmSwiftをインストール
→プロジェクト内の.swiftファイルでimport RealmSwiftを追記
→エラーメッセージ「**No such module ‘RealmSwift’**」結果…ビルドしたらエラー消えた、、!
podのとかRealmのインストール方法を知りたい方は、一緒に下に進んでいきましょう!↓↓↓# やりたいこと
1. CocoaPodsを使う
2. RealmSwiftをインストールする
3. プロジェクトの中でRealmSwiftをimportする## 実行環境
・MacOSX Catalina バージョン10.15.1
・Xcode バージョン11.2## CocoaPodsを使うための準備(環境構築)
コマンドラインツールで以下のように打ちます。
“`sudo gem install coco
【Swift】UITabBarControllerでアプリ起動時に指定したタブを表示する
UITabBarControllerで最初にデフォルト表示されるタブを指定する方法です。
調べてもObjective-Cでの記述ばかりだったので残しておきます。## 結論
`TabBarController.swift`を作り`selectIndex`で表示したいタブの番号を指定する“`swift:TabBarController.swift
class TabBarController: UITabBarController {override func viewDidLoad() {
super.viewDidLoad()
selectedIndex = 1
}
}
“`これで理解できる方、この記事はここまでです。
以下、順に`TabbarController.swift`を作った場合と作らなかった場合の挙動と、実装の手順を示していきます。
## 確認環境
Xcode 11.1
iOS 13.1(Simulator)
Storyboard使用## プロジェクト生成
画像のような状態のデモプロジェクトを用いて
[iOS][Swift]SnapKitをRxSwiftと連携する
# はじめに
iOSでコードベースでレイアウトを組む際に便利なSnapKitと、振る舞いを宣言的に記述できるRxSwiftを連携する方法について説明します。# 前提
以下のライブラリについて基本的な知識を有している方向けの記事です
– RxSwift https://github.com/ReactiveX/RxSwift
– RxCocoa https://github.com/ReactiveX/RxSwift/tree/master/RxCocoa
– SnapKit https://github.com/SnapKit/SnapKit# サンプルアプリ
https://github.com/idomazine/RxSnapKit
`git clone`後、 `pod install` を実行しXCodeでビルドします。# RxでConstraintの値を操作
以下のように記述することでSnapKit.ConstraintのプロパティをRxのBinderに適応させることができます。
“`
import RxSwift
import RxCocoa
import
PythonistaでiOSの写真に画像を追加する
# Pythonistaで処理した画像をiOSの写真に追加したい
## サンプルコード
“` sample.py
import photos
import os
import tempfile
from PIL import ImageimageName = ‘lena.png’
img = Image.open(imageName)
temp_path = os.path.join(tempfile.gettempdir(),imageName)
img.save(temp_path)
photos.create_image_asset(temp_path)“`
## 解説
画像を追加する関数は“photos.create_image_asset() “なのですが、どこかに画像が保存されていないといけないので、“temp_path “を取得し、一旦そこに保存しているよって感じです。
スクリプトがあるディレクトリと同じところに一旦保存するよりもなんとなくスマートですね。
【意外と知らない】iOSアプリでのビルドコード
![スクリーンショット 2019-11-07 11.31.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49481/777478e0-0837-580c-c106-f36cd67e3f91.png)
意外と知らない人多いと思うのですが
***iTunes Connect***に送信するアプリ(iOS等)のビルドコードですが
バージョンコードが変われば同じものを使用してもいいんです。Androidだとだめなはずなので勘違いしている人多いかもしれないですね。
Combineフレームワーク リンク集
# はじめに
Combineフレームワーク についてのリンクをまとめてみました。
特にサンプルコードを見てみるのは、Combineフレームワークの概要を掴むのにとても有効です。#【Apple公式】
## Apple Documentation**Combine**
https://developer.apple.com/documentation/combine**Receiving and Handling Events with Combine**
https://developer.apple.com/documentation/combine/receiving_and_handling_events_with_combine## WWDC2109
**Introducing Combine**
https://developer.apple.com/videos/play/wwdc2019/722
>Combine is a unified declarative framework for processing values over time. Lear
macOS Catalinaで fastlaneが動作しなくなった件 & 解決方法
macOS Catalinaにアップデート後、fastlaneを実行すると、このようなエラーになる。
“`
% fastlane
zsh: /usr/local/bin/fastlane: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: no such file or directory
“`CatalinaからRubyのバージョンが変わったそうなのだが、その関連でエラーが出ているとおもわれます。
自分はこの辺の設定に詳しくなく、解決にかなり時間を費やしました:frowning2:。もし、同様の件でお困りの方がいれば参考になると思い、解決方法を書き残して置きます。
## エラー解消のために行ったこと
### gem update
gemを更新する。
“`
% sudo gem update –system
“`### install fastlane(失敗)
fastlaneを更新する。
“`
% sudo gem inst
Buttonのタイトル変更について
## Buttonのタイトルが変更できない、、、
Labelと同じだと思い“`swift:changeButtonTitle
ボタン名.currentTitle = “変更したいタイトル名”
“`とすると、エラーが表示されてしまいました。
## 変更方法
以下のコードで変更できました↓
“`swift:changeButtonTitle
ボタン名.setTitle(“変更したいタイトル名”, for: .normal)
“`##### 参考サイト
– https://stackoverflow.com/questions/26326296/changing-text-of-uibutton-programmatically-swift
Swiftで予約語を変数名やCase名として使う
Swiftで変数名やenumのcase名を命名しようとして使った単語が、予約語であったため使えなかったという事態に遭遇したことがある人は多いと思う。
“`UserStatus.swift
enum UserStatus {// Error: private’ modifier cannot be applied to this declaration
case private
case open
}
“`“`Vars.swift
// selfという命名のString型の変数は作れない
let self = “Ham Spam”
“`今回はその回避方法と、回避方法を使う際の注意点を解説する。
## 予約語を使う
Swiftの予約語として使われている単語は“でその変数名やenumのcaseを囲むことで使うことができる。
“`Enum.swift
enum Status {
case `public`
case `private`
}let status1 = Status.private
let s
Firebase AuthenticationでTwitterのOAuthを利用し、Twitter APIにリクエストする
[2018年5月にTwitterKitのサポートが終了](https://blog.twitter.com/developer/ja_jp/topics/community/2018/TKSDK_tr.html)し、Firebase Authenticationでも[OAuthを利用したTwitterログイン](https://firebase.google.com/docs/auth/ios/twitter-login?hl=ja)が推奨されるようになりました。
設定まわりに関してはすでにいくつか記事があるので、主にiOS/Swiftでの実装部分について書きたいと思います。というわけでさっそく作っていきましょう???
## 環境
* iOS 11.0〜
* Swift 5
* FirebaseAuth
* [OAuthSwift](https://github.com/OAuthSwift)
* [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)## TwitterのDeveloperア
iOS10のサポートを切るときにやったこと
先日、自社アプリのサポートOSを10.0 -> 11.0に変更する対応をしました。
実装するうえで参考になる記事が少なく、手探りでやっていったので、そのときの手順・ハマった点などをメモしておきます:pencil:# iOS10を切ることにした経緯
もともとチーム内に「管理面や新しい機能を取り入れていくことなどを考えると、古いバージョンを切りたいね」という話がありました。
さくっと調べてみたところ、2019年8月末時点で色々なアプリがiOS10を切り始めていることがわかりました。【iOS10のサポート切ってるアプリ】
* Slack
* Yahoo系列アプリ(ヤフオク、Yahoo!カーナビ、Yahoo! MAPなど)
* Kyash
* bitFlyer
* Eight
* SHOWROOM
* Airレジ
* テラー意外と多いな??
— orimomo / e
RxSwift + SPM + XCode11.2 + iOS 環境でビルドすると実行時にクラッシュする
##多分期間限定で掲載する投稿になります
表題の通りの内容です。XCode11からSwift Package Managerが統合されたので、Carthageから乗り換えていたのですが、先日リリースされたXCode11.2 で地雷を踏みました。
私の環境 : Xcode 11.2 final, Catalina 10.15.1, iOS 13.2
https://bugs.swift.org/browse/SR-11564?focusedCommentId=51285&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-51285
SPMに関連する処理の部分で、linkerがmoduleを最適化するところにバグがあるみたいです。
ですので、RxSwift以外でもSPMをつかってると広く影響があるようですね。一応回避策として、DEAD_CODE_STRIPPING = NO とオプションをつければいける様なのですが、私はひとまず、Xcode 11.1 を入れ直して対応し
Firebase Cloud MessagingをiOSアプリで利用したときのメモ
– Apple Push Notification Authentication Keyを用意する
– アプリIDの作成
– プロビジョニング プロファイルを作成https://firebase.google.com/docs/cloud-messaging/ios/certs?hl=ja
—
– FirebaseプロジェクトにiOSアプリを追加
– Apple Push Notification Authentication KeyをFirebaseプロジェクトのiOSアプリにアップロード
– Firebase 構成ファイル(GoogleService-Info.plist)をDLしてiOSプロジェクトに追加
– iOSプロジェクトにFirebaseSDKを追加(CocoaPods)
– https://github.com/firebase/quickstart-ios/blob/15a45e32607dceb3264da28879a48d7890b7dd0c/messaging/MessagingExampleSwift/AppDelegate.swift を参考に
XcodeでDistribution時にentitlementsエラー
# Distribution時にentitlementsエラーが発生
XcodeのOrganizerでアーカイブを `Distribute App` しようとしたら、entitlementsに関するエラーが発生しました。ちょっとハマってしまったので、解決(?)方法について共有します。
## 前提
“`
❯ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15
BuildVersion: 19A583❯ xcodebuild -version
Xcode 10.1
Build version 10B61
“`## エラーの内容
作成したアーカイブを選択して `Distribute App` をクリックすると、signingオプションの選択を求められます。
![スクリーンショット 2019-11-05 18.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27943/def0551a-7331-e926-d959-6c95
画面遷移から戻るときに親ビューの画面を更新する方法
##目的
親ビューからモーダル遷移した子ビューで操作を行い、その結果に応じて親ビューの内容を更新させるという処理を行いたかったのですが、Delegateを使う以外に簡単な方法がありましたので書くことにしました!(Delegateまだ理解してない…笑)実際には、
・親ビューにCollectionViewがある
・モーダル遷移した子ビューでCollectionViewに表示する情報を追加する
子ビューから親ビューに戻った時にCollectionViewのinsertItems()やアニメーションなどを含めたメソッドを実行したかったやり方を調べているとDelegateを使って処理を委譲するという方法を多くみましたが、このくらいの簡単な処理であれば**CallBack**という方法が簡単だということを知ったので紹介します!
##使うViewController
親:ViewControllr
(ボタンを押すと子ビューにモーダル遷移する)
子:ChildViewController
(ボタンを押すとdismissして子ビューから渡す値で親ビューの関数を実行する)
(今回は子ビューか
SwiftUIでプレビューがUnknown preview provider “ContentView_Previews”エラーとなる
小ネタですがハマってしまったので誰かの参考になれば。
## 環境
– macOS Catalina 10.15.1
– Xcode 11.2 (11B52)
– iOS 13.2## 現象
ビルドは通りますし、実行したら実機で動きますが、
プレビューがエラーで表示されません。![ 2019-11-06 10.09.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190739/3b367653-b0db-6800-a576-b54752d59aab.png)
## 原因
Display Nameが日本語なのが原因でした。
英数字のみにしたら直りました。![ 2019-11-06 10.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190739/f8696525-f5ba-6a32-f40a-0ef3d8ed543a.png)
## 回避策
そうは言ってもアプリ名は好きに付けたいです
SwiftUIとCoreDataを@FetchRequestで連携させる
データベースのデータをSwiftUIに表示したい場合、
データベースがCoreDataであれば、
`@FetchRequest` と `FetchedResults` を使うことによって連携することができます。# FetchRequest
[FetchRequestのドキュメント](https://developer.apple.com/documentation/swiftui/fetchrequest)
FetchRequestのパラメータには `sortDescriptors` や `predicate` などが用意されていて、
`@FetchRequest` をFetchedResultsプロパティにつけることによってCoreData内のデータを取り出せます。
例えば、EntityというデータモデルをcreateAt順で取り出したい場合は以下のコードの感じでプロパティを用意します。“`swift
@FetchRequest(entity: Entity.entity(), sortDescriptors: [NSSortDescriptor(keyPath
URLからQRコードを生成する
#手順
これをコピペ“`swift
extension String {func generateQR() -> UIImage? {
guard let data = self.data(using: .utf8) else { return nil }
guard let qr = CIFilter(name: “CIQRCodeGenerator”, parameters: [“inputMessage”: data, “inputCorrectionLevel”: “M”]) else { return nil }
let sizeTransform = CGAffineTransform(scaleX: 10, y: 10)
guard let qrImage = qr.outputImage?.transformed(by: sizeTransform) else { return nil }
return UIImage(ciImage: qrImage)
}
}
`