ナトーアプリ工房

iOS開発やApple製品の情報発信ブログです

【Mac】DeepLのショートカットで英文をスピード翻訳する

Macの英文をDeepLのショートカットでスピード翻訳する方法

XcodeSafariからApple Developer Documentationの英文を直ぐに翻訳したい時などに便利な方法です。

  • DeepLをインストール
  • ショートカットキーを変更

□ DeepLをインストールする

aiを使った自然な翻訳が可能なDeepLをインストールします。

www.deepl.com

Macにダウンロード 無料!」をクリックします。

f:id:nato99001:20210605171013p:plain

 

ダウンロードしたファイルDeepL.dmgをダブルクリックしてインストールします。

f:id:nato99001:20210605172846p:plain

 

□DeepLを設定する

Macから「システム環境設定」→「セキュリティとプライバシー」→「プライバシー」タブをクリックします。

鍵を外してアクセシビリティからDeelpLをチェックします。

f:id:nato99001:20210605173754p:plain

 

ログインなしでDeepLを起動します。

ログインの横にある下矢印から環境設定をクリックします。

f:id:nato99001:20210605174123p:plain

 

DeepLのショートカットキーを変更します。

デフォルトは⌘キーCを2回ですが、面倒なので⌘キーLにします。

f:id:nato99001:20210605174407p:plain

 

□ XcodeでDeepLを使ってみる

Xcodeでoptionキーを押しながらクリックするとクイックヘルプが表示されます。

f:id:nato99001:20210605175103p:plain

 

内容が分からない英文をドラックして⌘キーとLをクリックします。

f:id:nato99001:20210605175335p:plain

 

直ぐに翻訳結果が表示されます。

f:id:nato99001:20210605175700p:plain

 

さらに単語を詳しく知りたい時は、単語をダブルクリックします。

f:id:nato99001:20210605180115p:plain

 

赤枠のフィールドをクリックします。

f:id:nato99001:20210605180627p:plain

 

単語の詳細が表示されます。

f:id:nato99001:20210605180728p:plain

 

□ ブラウザでDeepLを使ってみる

Apple Developer Documentation で使ってみます。

developer.apple.com

 

赤枠の英文を翻訳して見ます。

英文をドラックして⌘キーとLをクリックします。

f:id:nato99001:20210605181339p:plain

 

翻訳結果が表示されます。

f:id:nato99001:20210605181642p:plain

 

日本語から中国語など、各種外国語にも対応しています。

f:id:nato99001:20210605182231p:plain

 

【SwiftUI】UdemyLessonサンプルアプリ解説

Udemy SwiftUIオンラインレッスンのサンプルTODOアプリ解説

  • レッスンでの構造体やクラス、変数の名称が抽象的で値の移り変わりが分かりにくいため、日本語名にしました。
  • 全体が見える様、別ファイルを作らないでContentView.swiftに全て記述しました。

アプリの仕様

・+ボタンでテキストフィールドが表示されてTODOを追加

・TODO項目をクリックすると□が☑︎になりTODO内容に取り消し線が入る

・Deleteボタンをクリックするとチェック済みTODOが消える

 

f:id:nato99001:20210529140107p:plain

  • 構造体を配列にする場合idという変数を持った「Identifiableプロトコル」が必要になります。今回はUUIDメソッドにてユニークなidを生成していますが、手動で生成しても大丈夫です。ユニークなidがないとSwiftUIがそのViewで利用されているデータがどれなのかを特定しておかないと、データが更新されたときにどのViewを再構築すればいいのかわからなくなってしまうからです。
  • タップしたリスト行を検知するのにfirstIndex(of:)メソッドを使っています。その場合「Equatabelプロトコル」が必要になります。
  • テキストフィールドで使うプロパティーラッパー@stateを付けた変数に日本語は使えませんでした。

プログラムソースをgithubにアップしています。

github.com

import SwiftUI

 

struct 構造体:Identifiable,Equatable {

    var id = UUID()

    var 構造体check:Bool

    var 構造体todo:String

    init(イニシャライザ変数check:Bool,イニシャライザ変数todo:String) {

        self.構造体check = イニシャライザ変数check

        self.構造体todo = イニシャライザ変数todo

    }

}

 

class クラス:ObservableObject {

    @Published var 構造体インスタンス配列 = [

        構造体(イニシャライザ変数check: true, イニシャライザ変数todo: "勉強"),

        構造体(イニシャライザ変数check: false, イニシャライザ変数todo: "散歩")

    ]

    @Published var 入力状態チェック変数:Bool = false

}

 

struct ContentView: View {

    @EnvironmentObject var クラスインスタンス:クラス

    var body: some View {

        NavigationView {

            List {

                ForEach(クラスインスタンス.構造体インスタンス配列) { ForEach変数 in

                    Button(action:{

                        guard let 要素番号 = クラスインスタンス.構造体インスタンス配列.firstIndex(of: ForEach変数) else {

                            return

                        }

                        self.クラスインスタンス.構造体インスタンス配列[要素番号].構造体check.toggle()

                    })

                    {

                        リスト行表示ビュー(リスト行表示ビュー変数check: ForEach変数.構造体check, リスト行表示ビュー変数todo: ForEach変数.構造体todo)

                    }

                }

                if self.クラスインスタンス.入力状態チェック変数 {

                    行追加表示ビュー()

                } else {

                    Button(action: {

                        self.クラスインスタンス.入力状態チェック変数 = true

                    })

                    {

                        Text("+")

                        .font(.title)

                    }

                }

            }

            .navigationBarTitle(Text("ToDo"))

            .navigationBarItems(trailing: Button(action:{

                削除関数()

            })

            {

                Text("Delete")

            }

            )

        }

    }

    func 削除関数(){

        let 削除関数変数 = クラスインスタンス.構造体インスタンス配列.filter({!$0.構造体check })

        self.クラスインスタンス.構造体インスタンス配列 = 削除関数変数

    }

}

 

struct リスト行表示ビュー: View {

    var リスト行表示ビュー変数check:Bool

    var リスト行表示ビュー変数todo:String

    var body: some View {

        HStack {

            if リスト行表示ビュー変数check {

                Text("☑︎")

                Text(リスト行表示ビュー変数todo)

                    .strikethrough()

                    .fontWeight(.ultraLight)

            } else {

                Text("□")

                Text(リスト行表示ビュー変数todo)

            }

        }

    }

}

 

struct 行追加表示ビュー: View {

    @State var addListViewTodo = "" //現在propertyWrapperでは変数名に日本語を使えません

    @EnvironmentObject var クラスインスタンス: クラス

    var body: some View {

        TextField("タスクを入力してください", text:$addListViewTodo,

        onCommit: {

            self.todo作成関数()

            self.クラスインスタンス.入力状態チェック変数 = false

        })

    }

    func todo作成関数() {

        let 新しいtodo = 構造体(イニシャライザ変数check: false, イニシャライザ変数todo: addListViewTodo)

        self.クラスインスタンス.構造体インスタンス配列.insert(新しいtodo, at: 0)

        self.addListViewTodo = ""

    }

    

}

 

struct ContentView_Previews: PreviewProvider {

    static var previews: some View {

        ContentView()

            .environmentObject(クラス())

    }

}

 

 

【Xcode】GitHubを使う

XcodeGitHubを使う方法です。

  • XcodeGitHubのアカウントを登録する。(初回のみ)
  • Xcodeでローカルリポジトリを作成する。(プロジェクト作成時のみ)
  • Xcodeでコミット(登録)する。
  • Xcodeでリモートリポジトリを作成する。(プロジェクト作成時のみ)
  • Xcodeでプッシュ(送る)する。

XcodeGitHubのアカウントを登録(初回のみ)

 

1.Xcode > Preferences を選択します。

f:id:nato99001:20201226184837p:plain

 

2.プラスアイコンからGitHubを選んでContinueを選択します。

f:id:nato99001:20201226184855p:plain

 

3.アカウント名とトークンを入力してSign Inを選択します。

f:id:nato99001:20201226202426p:plain

 

4.GitHubのアカウントが作成されます。

f:id:nato99001:20201226202449p:plain

 

Xcodeでローカルリポジトリの作成(プロジェクト作成時のみ)

  1. Xcodeで"Source Control > Create Git Repositories..."を選択します。

f:id:nato99001:20201226184752p:plain

 

2.Createを選択します。

f:id:nato99001:20201226184815p:plain

 

 

Xcodeでコミット

 

1.M(modify/修正された)のついたファイルを右クリックして"SourceControl>Commit"ViewController.swift"..."を選択します。

f:id:nato99001:20201226202505p:plain

 

2.Commit 1 File を選択します。

f:id:nato99001:20201226202521p:plain

 

□ Xcodeでリモートリポジトリを作成

 

1.Remote > New "プロジェクト名 " Remote... を選択します。

f:id:nato99001:20201226202535p:plain

 

2.Createを選択します。

f:id:nato99001:20201226202548p:plain

 

□ Xcodeでプッシュ

 

1.Source Control > Push...を選択します。

f:id:nato99001:20201226202559p:plain

 

2.Pushを選択します。

f:id:nato99001:20201226202612p:plain

【Xcode】ストーリーボードとエディターを同時に表示させる

プロジェクトができた画面からMain.storyboardを選択します

f:id:nato99001:20201213155301p:plain

右上のAdd Editer On Rightをクリックします

f:id:nato99001:20201213155356p:plain

プロジェクト名から階層を辿ってViewController.swiftをクリックします

f:id:nato99001:20201213155429p:plain

View Controller Scene をクリックするとストーリーボードが表示されます

f:id:nato99001:20201213155813p:plain

 

画面を大きく使いたい時はそれぞれ非表示にすることができます

f:id:nato99001:20201213155758p:plain

 

【Xcode】ストーリーボードとエディターのガイドを非表示にする

  • ストーリーボードのガイドを非表示にする方法

f:id:nato99001:20201213150351p:plain

 

Mimimapのチェックを外します

f:id:nato99001:20201213151408p:plain

 

  • エディターのガイドを非表示にする方法

f:id:nato99001:20201213151728p:plain

 

Mimimapのチェックを外します

f:id:nato99001:20201213151753p:plain



 

【Xcode】MFMailComposeViewControllerを使ってアプリ内からメールを送信する

MessageUI.frameworkを追加します

f:id:nato99001:20201205225241p:plain

f:id:nato99001:20201205225949p:plain

f:id:nato99001:20201205230134p:plain

 

エディターで以下を追加します

import MessageUI

MFMailComposeViewControllerDelegate

f:id:nato99001:20201205230506p:plain

 

Mail送信ボタンをMain.storyboardに作成してIBActionを設定します

例)tapBtnMale

    @IBAction func tapBtnMale(_ sender: Any) {

        

        if MFMailComposeViewController.canSendMail() {

            let mail = MFMailComposeViewController()

            mail.mailComposeDelegate = self

            mail.setToRecipients(["xxx@xxx.xxx"]) // 宛先アドレス

            mail.setSubject("お問い合わせ") // 件名

            mail.setMessageBody("ここに本文が入ります。", isHTML: false) // 本文

            present(mail, animated: true, completion: nil)

        } else {

            print("送信できません")

        }

    }

    

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

        switch result {

        case .cancelled:

            print("キャンセル")

        case .saved:

            print("下書き保存")

        case .sent:

            print("送信成功")

        default:

            print("送信失敗")

        }

        dismiss(animated: true, completion: nil)

    }

 



 

 

【Xcode】Projectをコピーして新規作成する

既存のProjectを複製して新しいProjectを作成する方法

例)projectA をコピーしてprojectBを作成する

 

projectA のフォルダをコピーして貼り付けます

f:id:nato99001:20201122164024j:plain

projectBに名前を変更するします

f:id:nato99001:20201122164051j:plain

projectB内の「projectA.xcodeproj」をXcodeで開きます

f:id:nato99001:20201122164128j:plain

NavigatorエリアからプロジェクトのName"プロジェクトB"に変更します

f:id:nato99001:20201122164145j:plain

Renameを選択します

f:id:nato99001:20201122164156j:plain

Continueを選択します

f:id:nato99001:20201122164208j:plain

product→scheme→Manage Schemes を選択します

f:id:nato99001:20201122164220j:plain

プラスボタンから「projectB」を作成します

f:id:nato99001:20201122164233j:plain

projectAは削除します

f:id:nato99001:20201122164250j:plain

Deleteを選択します

f:id:nato99001:20201122164305j:plain

Closeを選択します

f:id:nato99001:20201122164318j:plain

projectA を projectB へ 

projectATests を projectBTests へ 

projectAUITests projectBUITests へリネームします

f:id:nato99001:20201122164331j:plain

TARGETS → Project → Build Settings → Packaging MyOrganizationIdentifer.projectA を MyOrganizationIdentifer.project Bに変更 します

projectA/Info.plist  projectB/Info.plist に変更します

f:id:nato99001:20201122164346j:plain