個人アプリ開発で月収5万円目指す

アプリ個人開発 まるブログ

アプリ開発覚え書き

厳選!私が実際に役に立ったUnity,iOS おすすめ動画講座【随時追加】

f:id:marumaro7:20200624224539p:plain

はじめに

みなさんプログラミングの勉強どうやって進めていますか??

私のおすすめは断然これ!


Udemy です。

友人から教えてもらったのですが、一流講師の講座が時間を選ばず受けられます。

セール時には1000円台から受講できるので本を買うより安くコスパ最強です。

エンジニアにマンツーマンで教えてもらおうと思うと、
1時間2500円が相場なので、それを考えると定価で購入してもお得だと思ってます。
とはいうものの、副業するならコストはできるだけ抑えたいので購入はセール時が狙い目です。

質問し放題に加えて、30日間返金保障なので安心して購入できます。

Udemyというか動画教材の欠点としては、
あとで見返すときに「確認したいところがわからない」
ということがあるので、Qiitaやブログなどでメモを残しておくと良いかもしれません。

Udemyでは細かくセクションごとに分かれ探しやすくなっていますが、
それでも不思議、私は探す笑

私が実際に役に立ったUdemyのおすすめ講座を紹介します。

Unity教材

Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】

Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】

【感想】
Unity教材で迷ったらこれで間違いなし! marumaro7.hatenablog.com ↑こちらの記事でも紹介しましたが、Unityの基礎だけでなく、
超つまづきやすいAndroidiOSのリリース手順まで解説しています。
なんですかこれ、、、神ですか?

Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】

Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】

【感想】
Unityで3Dをやりたいならこれ!
基礎から学ぶので初心者でも安心♪

Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】

Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】

【感想】
自分でマリオみたいなゲームが作れる幸せ!
マリオメーカーよりも自由に!

[初心者向け] Blender 2.8でアニメーションを作成して Unity で動かすまでの30分講座

[初心者向け] Blender 2.8でアニメーションを作成して Unity で動かすまでの30分講座

【感想】
3Dモデルに命を吹き込む!
Unity×Blenderで制作の幅が広がります。
Blenderのインストールは事前に必要です。

Unity2Dパズルゲーム開発入門:Admob広告実装と高速にスマホゲームを量産する実践テクニック講座【スタジオしまづ】

Unity2Dパズルゲーム開発入門:Admob広告実装と高速にスマホゲームを量産する実践テクニック講座【スタジオしまづ】

【感想】
とにかく量を作る!
なるほど量産テクニックです。

Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース【スタジオしまづ】

Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース【スタジオしまづ】

【感想】
Unityのチュートリアルをなにかしらやったことある人向けです。
カードゲームの基礎はここに。

iOS教材

【iOS13対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp

【iOS13対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp

【感想】
ベストセラーだけあって初心者でもわかりやすい
Firebaseとの連携も解説されているのが個人的に嬉しいポイントです。

おわりに

Unity教材全部スタジオしまづやないか!と思いました?
だってわかりやすいんだもの、、、

ButtonClick プライバシーポリシー

制定日:2021/05/03

このページは、Maruyu Apps(以下「私」と言います。)が提供するスマートフォンアプリ「ButtonClick」(以下「本アプリ」と言います。)における利用者情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下「本ポリシー」といいます。)を定め、公表しております。本アプリをインストールする前に本ポリシーをご確認いただき、内容をご理解の上で本アプリをご利用下さい。
なお、本ポリシーにおいて、「利用者情報」とは、お客様の識別に係る情報、通信サービス上の行動履歴、その他お客様のスマートフォンにおいてお客様と結びついた形で生成、利用又は蓄積されている情報であって、本ポリシーに基づき当社が取得するものを意味するものとします。

本アプリが利用する利用者情報

 
本アプリが利用する利用者情報は、下記の3つです。
  • アプリの広告表示のためにお客様の情報の一部を送信する可能性があります。
  • アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。
  • 問い合わせの際に利用者情報の一部を送信します。
  1. アプリの広告表示本アプリは広告表示のためにお客様の情報の一部を送信する可能性があります。広告表示は、下記2社のサービスを利用しており、本アプリは2社に利用者情報の提供を行います。それぞれのサービスが利用している利用者情報と目的については各社のサービスのプライバシーポリシーをご確認ください。

  2.アプリのアクセス解析
  本アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。

  アクセス解析Google Analyticsを利用しております。

  本アプリは画面遷移を行った際に、画面IDと利用者情報をGoogle Analytics

  に送付します。

  1. 問い合わせ
    本アプリでは問い合わせの際に利用者情報の一部を送信します。
    問い合わせはメールで行い、メール本文に下記情報が埋め込まれます。また、メールで送信されるため、メールアドレスも送信されます。
    • 名前、メールアドレス
    • 端末名、OSバージョン、その他端末情報(画面サイズ、ピクセル密度、利用可能ヒープメモリ量)
    • アドオン購入状況

利用目的

利用者情報はそれぞれ下記目的に利用されます。

  • 三者の広告の配信・表示のため
  • 当社のサービスに関連して、個人を識別できない形式に加工した統計データを作成するため
  • 本アプリに関するご案内、お問い合せ等への対応のため

【Unity】iOS14.5以降でIDFA取得するためにATT対応する方法 

はじめに

タイトル専門用語でわけわからん!
はい、私も同じです。
とりあえず、広告収益に影響が出る恐れがあるということなので、
対応していきますっ!

IDFAとは?

IDFAはIdentifier For Advertisingの略

端末固有のIDで、これを使ってデータが収集されます。
そして、そのIDのユーザーに興味がありそうな広告を
表示するために使用されます。

なので、IDFAを取得していないと、 ガチゲーマーに美容液の広告が表示されたりするので、
広告をタップしてもらう確率が低くなると予想されています。

(ガチゲーマーは美容液使わないという話では無いですよっ!
広告をタップする確率が高いか低いかの話ですっ!)

iOS14.5から仕様変更

iOS14.4まではこのIDFAがユーザーの許可無しで取得できていました。

しかし、iOS14.5からIDFAを取得するにはユーザーの許可が必要になりました。

ATTとは?

ATTはAppTrackingTransparency の略

iOS14からIDFAの許諾をATTシステムで管理するようになりました。

「勝手にIDFA取得させねぇから!システム」と思っておけば良いと思います。
(よくわかってない)

許可リクエスト実装

IDFAを取得するために、
ユーザーへ許可を問うリクエストウインドウを表示する必要があります。
今回はその許可リクエストを実装します。

1.前提条件

Google Mobile Ads Unity Plugin v5.4.0
・広告は実装済

2.コード実装

コード実装の流れは下記です。
1.Objective-Cの言語でリクエストウインドウを表示する処理を書く
2.C#にて↑で作った処理を呼び出す

2-1.Objective-Cの処理

2-1-1.拡張子mmのファイルを作成する

テキストエディットで適当にテキストファイルをデスクトップに作ります。 f:id:marumaro7:20210429170709p:plain

ファイルの名前を「RequestIDFA.mm」に変更します。
ファイル名は何でも良いですが、拡張子を「.mm」にして下さい。
f:id:marumaro7:20210429172240p:plain

f:id:marumaro7:20210429172154p:plain

2-1-2.リクエストウインドウを表示する処理を書く

「RequestIDFA.mm」に処理を書いていきます。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>

extern "C" void _requestIDFA() {
    if (@available(iOS 14.5,*)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
            // Tracking authorization completed. Start loading ads here.
            // [self loadAd];
          }];
    }
}

f:id:marumaro7:20210502093330p:plain

2-1-3.Unityにファイルを追加

Unityにファイルを追加します。
Assets>Plugins>iOSに今回作成した「RequestIDFA.mm」を追加して下さい。

f:id:marumaro7:20210429173916p:plain

2-2.Unity(C#)での処理

2-2-1.スクリプト作成

C#スクリプトを作成します。
今回は「IDFA」という名前で作りました。
スタート関数でリクエストウインドウを呼び出す内容となっています。

using UnityEngine;
using System.Runtime.InteropServices;

public class IDFA : MonoBehaviour
{

#if UNITY_IOS//iOSの場合だけ処理

    //MyObjc.mm で定義しているObjective-C(iOSで使用されている言語)の関数を以下のようにC#側で定義する
    [DllImport("__Internal")]//iOSのプラグイン読み込み 参考 https://docs.unity3d.com/ja/2018.4/Manual/NativePlugins.html
    private static extern void _requestIDFA();//外部で実装されるメソッドを宣言 参考 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/extern

#endif//iOSの処理範囲終わり


    private void Start()
    {
#if UNITY_IOS//iOSの場合だけ処理

        _requestIDFA();//IDFAリクエストの実行

#endif//iOSの処理範囲終わり
    }

}

2-2-2.空のオブジェクトに割付け

作成した「IDFA」のコードを空のオブジェクトに割り付けます。
空のオブジェクトの名前も「IDFA」にしました。 f:id:marumaro7:20210429174818p:plain

2-2-3.ビルド

ビルドしてUnity-iPhone.xcodeprojを開いて下さい。

f:id:marumaro7:20210430133248p:plain

一応ビルド手順
marumaro7.hatenablog.com

3.Xcodeでの設定

Xcodeでは
1.Info.plistに「Privacy - Tracking Usage Description」を追加
2.「AppTrackingTransparency.framework」を追加
を行う必要があります。

3-1.Info.plistに「Privacy - Tracking Usage Description」を追加

Unity-iPhone
>info.plist
>「+」ボタン(マウス カーソルをInformation Property Listに合わせると出現します)
>「Privacy - Tracking Usage Description」と入力し追加
>追加した「Privacy - Tracking Usage Description」のValueに説明書きを追加
例:あなたの好みに合わせた広告を表示するために使用されます
Valueに入力しないと例外処理とされてしまうようなので必ず入力しましょう

f:id:marumaro7:20210429180154p:plain

文章の多言語化はこちらの「アプリ名ローカライズ iOS編」の要領で
CFBundleDisplayName = "";
とすればできます。 marumaro7.hatenablog.com

CFBundleDisplayName 入力例
f:id:marumaro7:20210430135458p:plain

3-2.「AppTrackingTransparency.framework」を追加

>Unity-iPhone
>UnityFramework
>「+」ボタン
>AppTrackingTransparency.frameworkを追加
f:id:marumaro7:20210429161836p:plain

4.動作確認

iOS14.5以降にだけ表示されます。

f:id:marumaro7:20210501094550p:plain

自動で設定

「3.Xcode」での設定は
Unity側の設定で自動化することができます。

以下を参考にすると良いです。

dolphinetech.com

以下引用

ここでは、プロジェクトビルド後に自動でframeworkを追加し、
info.plistを編集してくれる方法(というかスクリプト)を書いていきます

Assets > Editor にファイルを一つ作ってください(Editorフォルダがない場合は作成してください)

私は、「AddElementsInfoplist」としました

作成したファイルに以下かのような処理(クラス名以外)を実装してください

#if UNITY_IOS
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEngine;
public class AddElementsInfoplist
{
    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath)
    {
        // Info.plist に Privacy - Tacking Usage Description(NSUserTrackingUsageDescription)を追加する(ステップ2)
        string infoPlistPath = buildPath + "/Info.plist";
        PlistDocument infoPlist = new PlistDocument();
        infoPlist.ReadFromFile(infoPlistPath);
        PlistElementDict root = infoPlist.root;
        root.SetString("NSUserTrackingUsageDescription", "あなた様の好みに合わせた広告を表示するために使用されます!!!!");
        infoPlist.WriteToFile(infoPlistPath);
        
     // PBXProjectクラスというのを用いてAppTrackingTransparency.frameworkを追加していきます(ステップ3)
        string pbxProjectPath = PBXProject.GetPBXProjectPath(buildPath);
        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile(pbxProjectPath);
        string targetGuid = pbxProject.GetUnityFrameworkTargetGuid();
        pbxProject.AddFrameworkToProject(targetGuid, "AppTrackingTransparency.framework", true);
        pbxProject.WriteToFile(pbxProjectPath);
    }
}
#endif

これでUnityでビルド後、自動的にframeworkの追加とInfo.plistの編集が行われているはずです!

おわりに

言語化がわからなかったので、
Twitterで助けを求めたらすぐ助けていただきました。
JOEさんありがとうございます。


<追記> iPhoneをiOS14.5にしたら下記の対応が必要です。 marumaro7.hatenablog.com

参考

qiita.com dolphinetech.com hirokuma.blog blog.be-style.jpn.com qiita.com qiita.com developers.google.com

iOS14.5のテストビルドにはmacOS Big SurとXcode12.5が必要です。

はじめに

iOS14.5のテストビルドに少しつまづいた話です。

教訓

最初に今回の教訓だけ言います。
Xcode12.5はこのリンクからアップデートしましょう!

Xcode

Xcode

  • Apple
  • 開発ツール
  • 無料
apps.apple.com

iOS14.5テストビルドに必要なもの

iOS14.5テストビルドに必要なものは以下です。

macOS Big Sur(ビッグサー)
・Xcode12.5

なので、macOSがCatalina(カタリナ)なのであればOSのアップデートが必要です。
その後にXcodeをバージョンアップする必要があります。

ちなみに、
iPhoneをiOS14.5にアップデート後は、
古いXcodeバージョンでビルドしようすると怒られます。

f:id:marumaro7:20210501053410p:plain

問題:Xcodeをアップデートしたのにビルドできない

XcodeをデスクトップのAppStoreから検索してアップグレードしました。

だがしかし!

同じエラーが出てビルドができませんでした!

f:id:marumaro7:20210501053410p:plain

Xcodeのアップデート情報を見ると、

サポートはiOS14.4までとなっています・・・

Xcodeは、もうこれ以上アップデートできない・・・

え?詰んだ?\(^o^)/

iOS14.5に対応しているXcode12.5が実はあった!

ネットを徘徊していると
ここにiOS14.5に対応しているXcode12.5がありました!

Xcode

Xcode

  • Apple
  • 開発ツール
  • 無料
apps.apple.com

Xcode12.5がリリースされたのが4日前とのことだったので
ストアに反映されていなかっただけのようです。

おわりに

無駄にXcodeのアップデートしちゃった

「逆翻訳 翻訳時短」 プライバシーポリシー

制定日:2021/04/04

このページは、Maruyu Apps(以下「私」と言います。)が提供するスマートフォンアプリ「逆翻訳 翻訳時短」(以下「本アプリ」と言います。)における利用者情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下「本ポリシー」といいます。)を定め、公表しております。本アプリをインストールする前に本ポリシーをご確認いただき、内容をご理解の上で本アプリをご利用下さい。
なお、本ポリシーにおいて、「利用者情報」とは、お客様の識別に係る情報、通信サービス上の行動履歴、その他お客様のスマートフォンにおいてお客様と結びついた形で生成、利用又は蓄積されている情報であって、本ポリシーに基づき当社が取得するものを意味するものとします。

本アプリが利用する利用者情報

 
本アプリが利用する利用者情報は、下記の3つです。
  • アプリの広告表示のためにお客様の情報の一部を送信する可能性があります。
  • アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。
  • 問い合わせの際に利用者情報の一部を送信します。
  1. アプリの広告表示本アプリは広告表示のためにお客様の情報の一部を送信する可能性があります。広告表示は、下記2社のサービスを利用しており、本アプリは2社に利用者情報の提供を行います。それぞれのサービスが利用している利用者情報と目的については各社のサービスのプライバシーポリシーをご確認ください。

  2.アプリのアクセス解析
  本アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。

  アクセス解析Google Analyticsを利用しております。

  本アプリは画面遷移を行った際に、画面IDと利用者情報をGoogle Analytics

  に送付します。

  1. 問い合わせ
    本アプリでは問い合わせの際に利用者情報の一部を送信します。
    問い合わせはメールで行い、メール本文に下記情報が埋め込まれます。また、メールで送信されるため、メールアドレスも送信されます。
    • 名前、メールアドレス
    • 端末名、OSバージョン、その他端末情報(画面サイズ、ピクセル密度、利用可能ヒープメモリ量)
    • アドオン購入状況

利用目的

利用者情報はそれぞれ下記目的に利用されます。

  • 三者の広告の配信・表示のため
  • 当社のサービスに関連して、個人を識別できない形式に加工した統計データを作成するため
  • 本アプリに関するご案内、お問い合せ等への対応のため

【Unity】テキストのコピー機能を実装する方法

モバイル端末でインプットフィールドのテキストを
うまくコピーできなかったのでメモ

実装方法

下記スクリプトの関数をボタンに割り当てる

using UnityEngine;
using UnityEngine.UI;

public class CopyText : MonoBehaviour
{
    [SerializeField] private Text copyTarget_text;//コピーするテキストをアタッチ

 //この関数をボタンに割り当て
    public void CopyTextButton()
    {
        GUIUtility.systemCopyBuffer = copyTarget_text.text;
    }
}

参考

kan-kikuchi.hatenablog.com

【Unity】スクリプトから影を消す

参考記事の影を消す設定
スクリプトから実行するのに時間がかかったのでメモ

参考

tsubakit1.hateblo.jp

スクリプト

using UnityEngine.Rendering;
private SkinnedMeshRenderer skinnedMeshRenderer;
                //SkinnedMeshRendererを取得
                 skinnedMeshRenderer = gameObject.GetComponent<SkinnedMeshRenderer>();                
                skinnedMeshRenderer.shadowCastingMode = ShadowCastingMode.Off;//ライティング>投影>オフに変更 using UnityEngine.Rendering;が必要
                skinnedMeshRenderer.receiveShadows = false;//ライティング>影を受ける>オフ

【Unity】iOS実機確認中のXcode エラー UnityGfxDeviceWorker (32): EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, unused=0x0)

エラー内容

開発中のアプリで新機能を実装してiPhone8実機確認中(Xcodeにログが出る状態)にエラー発生
2回同じ内容で試して最初の文字だけ違っているが、たぶん同じ内容
端末は固まったり、落ちる

Xcode上のエラー内容
UnityGfxDeviceWorker (32): EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, unused=0x0)

Thread 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, unused=0x0)

調査内容

・ネットで調査>メモリが単純に少ないというコメント発見
・モデルを外部から読み込んだ時に発生する
・私が所持しているAndroid端末はメモリ4GBで同じ処理をしても落ちない
・iPhone8のメモリは2GB

原因はおそらくメモリ不足
iPhoneiPadのメモリを調査したところ
最近の端末は3GB以上なので2GB以下は制約をつけてリリースすることにした。

メモリサイズ取得 hiyotama.hatenablog.com

引用元: 【最新版】iPhone/iPadのメモリ(RAM)容量一覧【歴代全機種】 | iPadBoy

f:id:marumaro7:20210322073248p:plain

f:id:marumaro7:20210322073603p:plain

おわりに

3GB、4GB、6GBでどうなるか試したい
どの端末を買うかが悩ましい・・・