Unityで作ったアプリでメールを送信するコードを書き、Unity Editor上では動いているのだが、iOSでは送信されない、という問題が発生しました。
(検証バージョン Unity 5.6.4p1)
前エントリではAndroidの不具合でしたが、iOSではまた色々と対応が必要でしたので、下記にまとめます。
.NET 2.0にする
これはAndroidでの対応と同じですが、Player Settings内にある、Configurationの、Api Compatibility Levelを「.NET 2.0 subset」となっている場合「.NET 2.0」にします。
link.xml
Assets/以下にあるlink.xmlを修正します。使用しているライブラリと一緒に作成されているケースもありますが、無ければ作成します。
※参考ページ
<linker> <assembly fullname="System"> <type fullname="System.Net.Configuration.MailSettingsSectionGroup" preserve="all"/> <type fullname="System.Net.Configuration.SmtpSection" preserve="all"/> <type fullname="System.Net.Configuration.SmtpNetworkElement" preserve="all"/> </assembly> </linker> |
既にある場合は、同様のノードに追加します。
追加Frameworkの指定手順
XcodeでビルドするときにFrameworkの追加設定が必要なことがあります。
Assets/Editor/PostBuildProcess.cs というファイルを作ります(ファイル名は任意ですが、パスはEditor以下である必要があります)。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; public class PostBuildProcess { [PostProcessBuild(100)] public static void OnPostProcessBuild(BuildTarget target, string path) { if (target == BuildTarget.iOS) { PostProcessBuild_iOS (path); } } private static void PostProcessBuild_iOS( string path ){ string projectPath = PBXProject.GetPBXProjectPath(path); PBXProject pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(projectPath)); string target = pbxProject.TargetGuidByName("Unity-iPhone"); pbxProject.AddFrameworkToProject(target, "AssetsLibrary.framework", false); pbxProject.AddFrameworkToProject(target, "MessageUI.framework", false); pbxProject.AddFrameworkToProject(target, "Accounts.framework", false); pbxProject.AddFrameworkToProject(target, "Social.framework", false); pbxProject.AddFrameworkToProject(target, "AddressBook.framework", false); pbxProject.AddFrameworkToProject(target, "AddressBookUI.framework", false); File.WriteAllText(projectPath, pbxProject.WriteToString()); } } |
別の用途にも使えるので、覚え書きです。