Add mobile camera capture, polaroid preview, gallery save & native share
- カメラ撮影 → プレビュー(ポラロイド風白縁)→ 保存 / ネイティブ共有 - iOS / Android のネイティブ実装(共有・ギャラリー保存・FileProvider) - iOS は共有シートのプリウォームで初回表示を軽減 - iOS Info.plist 用途説明をビルド後処理で自動付与 - Android パッケージ名ガードを有効化(ビルド前チェック) - README を整備、.gitignore に slnx / .vscode / .utmp を追加 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
106
Assets/Editor/NativeSharePackageNameGuard.cs
Normal file
106
Assets/Editor/NativeSharePackageNameGuard.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using UnityEngine;
|
||||
|
||||
public class NativeSharePackageNameGuard : IPreprocessBuildWithReport
|
||||
{
|
||||
public int callbackOrder => 0;
|
||||
|
||||
private const string DefaultNativeSharePackageName = "jp.yourname.unity.nativeshare";
|
||||
|
||||
public void OnPreprocessBuild(BuildReport report)
|
||||
{
|
||||
if (report.summary.platform != BuildTarget.Android)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CheckUnityAndroidPackageName();
|
||||
CheckNativeSharePackageName();
|
||||
}
|
||||
|
||||
private void CheckUnityAndroidPackageName()
|
||||
{
|
||||
string applicationId =
|
||||
PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.Android);
|
||||
|
||||
if (string.IsNullOrEmpty(applicationId))
|
||||
{
|
||||
throw new BuildFailedException(
|
||||
"Android の Package Name が空です。\n\n" +
|
||||
"Project Settings > Player > Android > Other Settings > Identification > Package Name に、" +
|
||||
"自分のアプリ用の Package Name を設定してください。\n\n" +
|
||||
"例:\n" +
|
||||
"jp.piccolo.cameraapp"
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
applicationId.StartsWith("com.DefaultCompany") ||
|
||||
applicationId.Contains("DefaultCompany") ||
|
||||
applicationId.Contains("ProductName")
|
||||
)
|
||||
{
|
||||
throw new BuildFailedException(
|
||||
"Android の Package Name が初期値のままです。\n\n" +
|
||||
"Project Settings > Player > Android > Other Settings > Identification > Package Name を、" +
|
||||
"自分のアプリ用のものへ変更してください。\n\n" +
|
||||
"現在の値:\n" +
|
||||
applicationId + "\n\n" +
|
||||
"例:\n" +
|
||||
"jp.piccolo.cameraapp"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckNativeSharePackageName()
|
||||
{
|
||||
string assetsPath = Application.dataPath;
|
||||
|
||||
string[] targetFiles =
|
||||
{
|
||||
Path.Combine(assetsPath, "Scripts/NativeShareBridge.cs"),
|
||||
Path.Combine(assetsPath, "Plugins/Android/AndroidManifest.xml"),
|
||||
Path.Combine(assetsPath, "Plugins/Android/jp/yourname/unity/nativeshare/NativeShareBridge.java"),
|
||||
Path.Combine(assetsPath, "Plugins/Android/jp/yourname/unity/nativeshare/NativeShareFileProvider.java")
|
||||
};
|
||||
|
||||
foreach (string filePath in targetFiles)
|
||||
{
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
string text = File.ReadAllText(filePath);
|
||||
|
||||
if (text.Contains(DefaultNativeSharePackageName))
|
||||
{
|
||||
throw new BuildFailedException(
|
||||
"NativeShare の Android Java package 名が初期値のままです。\n\n" +
|
||||
"Android向けにビルドする前に、次の2種類の Package Name を確認してください。\n\n" +
|
||||
"1. Unity Player Settings の Package Name\n" +
|
||||
" Project Settings > Player > Android > Other Settings > Identification > Package Name\n" +
|
||||
" 例: jp.piccolo.cameraapp\n\n" +
|
||||
"2. NativeShare 側の Java package 名\n" +
|
||||
" 次の仮パッケージ名を、自分のものへ変更してください。\n\n" +
|
||||
" " + DefaultNativeSharePackageName + "\n\n" +
|
||||
" 例:\n" +
|
||||
" jp.piccolo.unity.nativeshare\n" +
|
||||
" jp.piccolo.cameraapp.nativeshare\n\n" +
|
||||
"変更が必要な主な箇所:\n" +
|
||||
"・NativeShareBridge.cs の AndroidJavaClass の文字列\n" +
|
||||
"・NativeShareBridge.java の package 行\n" +
|
||||
"・NativeShareFileProvider.java の package 行\n" +
|
||||
"・AndroidManifest.xml の provider android:name\n" +
|
||||
"・Android 側のフォルダ名\n\n" +
|
||||
"補足:\n" +
|
||||
"Unity Player Settings の Package Name と、NativeShare の Java package 名は、" +
|
||||
"同じである必要はありません。"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Editor/NativeSharePackageNameGuard.cs.meta
Normal file
11
Assets/Editor/NativeSharePackageNameGuard.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eec2ec8e1aacf4a24a36d085eea4ae1f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
43
Assets/Editor/NativeSharePostProcessBuild.cs
Normal file
43
Assets/Editor/NativeSharePostProcessBuild.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.Callbacks;
|
||||
|
||||
#if UNITY_IOS
|
||||
using UnityEditor.iOS.Xcode;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// iOS ビルド後に Info.plist へ写真ライブラリ関連の用途説明を自動で追加する。
|
||||
/// これが無いと UIImageWriteToSavedPhotosAlbum 実行時にクラッシュする。
|
||||
/// </summary>
|
||||
public static class NativeSharePostProcessBuild
|
||||
{
|
||||
// 必要に応じて文言を変更してください(App Store 審査でも参照されます)
|
||||
private const string PhotoAddUsageDescription =
|
||||
"撮影した画像を写真ライブラリに保存するために使用します。";
|
||||
|
||||
[PostProcessBuild(100)]
|
||||
public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject)
|
||||
{
|
||||
#if UNITY_IOS
|
||||
if (buildTarget != BuildTarget.iOS)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string plistPath = pathToBuiltProject + "/Info.plist";
|
||||
|
||||
PlistDocument plist = new PlistDocument();
|
||||
plist.ReadFromFile(plistPath);
|
||||
|
||||
PlistElementDict root = plist.root;
|
||||
|
||||
// 写真への「追加のみ」用途。保存だけならこちらで十分。
|
||||
if (root["NSPhotoLibraryAddUsageDescription"] == null)
|
||||
{
|
||||
root.SetString("NSPhotoLibraryAddUsageDescription", PhotoAddUsageDescription);
|
||||
}
|
||||
|
||||
plist.WriteToFile(plistPath);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
2
Assets/Editor/NativeSharePostProcessBuild.cs.meta
Normal file
2
Assets/Editor/NativeSharePostProcessBuild.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cd4622b4fc896418bbf909c16d3dd6b1
|
||||
Reference in New Issue
Block a user