端末のローカルファイルにアクセスすると「DirectoryNotFoundException」が発生。

Android では問題ないのに、iOSのみエラーが発生しました。

DirectoryNotFoundException: Could not find a part of the path "/var/mobile/Containers/Data/Application/E13DBFFC-F7F4-4CB2-BBDC-A5C9F44XXXXX/Documents/gdrive/Sample/images/photo0000-4165.jpg".
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00000] in <00000000000000000000000000000000>:0 
 ...

アクセスするファイルは存在しているのは間違いないのに、上記のエラー

っで、よくよく確認すると、フォルダー名が「Image」となっており、アクセス時は、「image」だった事が原因でした。

ファイル名も同じかな…

AppStore のスクリーンショットは、以下のスクリーンショットが必要となります。

iPhone 6.5インチディスプレイ(必須)
iPhone 5.5インチディスプレイ(必須)
iPad Pro(第6世代)12.9インチディスプレイ(必須)
iPad Pro(第2世代)12.9インチディスプレイ(必須)

シュミレータで取得するには、以下のシュミレータを指定します。

6.5 -> iPhone 13 Pro

5.5 -> iPhone 8 Plus

12.9 -> iPod Pro (12.9-inch)

スクリーンショットを切り欠き(ノッチ)無しで取得するには、Simulator  メニューの File -> Save Screen より取得します。

Container(
          width: double.infinity,
          height: 1,
          color: Colors.black,
        ),

全体のソース

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Draw 3 Lines Across Screen Width'),
        ),
        body: Column(
          children: [
            SizedBox(height: 10,),
            Container(
              width: double.infinity,
              height: 5,
              color: Colors.blue,
            ),
            SizedBox(height: 10,),
            Container(
              width: double.infinity,
              height: 5,
              color: Colors.red,
            ),
            SizedBox(height: 10,),
            Container(
              width: double.infinity,
              height: 5,
              color: Colors.green,
            ),
          ],
        ),
      ),
    );
  }
}

flutter で、versionName versionCode の設定するには?

pubspec.yaml にて

# flutter で、versionName versionCode の設定する
version: 1.2.0+4

versionName が 1.2.0

versionCode が4 になります。

iOS だとbuild-name build-number となります。

コマンド実行で指定するには

flutter build appbundle --build-name=1.3.0 --build-number=4  
flutter build ios --build-name=1.3.0 --build-number=4

 

 

Module 'app_tracking_transparency' not found

flutter からの起動は正常なのに、xcode からだと基本的にライブラリーが見つからない!

Module ‘xxx’ not found

 

runner.xcworkspace を開く

build でビルド成功

 

Xcodeを14.3にアップデートしてからArchive 作成時

// Xcodeを14.3にアップデートしてからArchive
mkdir -p /Users/falco/Library/Developer/Xcode/DerivedData/Runner-bizyteowoysewphgsajrrszlkzyw/Build/Intermediates.noindex/ArchiveIntermediates/Runner/BuildProductsPath/Release-iphoneos/Runner.app/Frameworks
Symlinked...
rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FMDB.framework" "/Users/falco/Library/Developer/Xcode/DerivedData/Runner-bizyteowoysewphgsajrrszlkzyw/Build/Intermediates.noindex/ArchiveIntermediates/Runner/InstallationBuildProductsLocation/Applications/Runner.app/Frameworks"
building file list ... rsync: link_stat "/Users/falco/AndroidProjects/SharedStudy/ios/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/FMDB.framework" failed: No such file or directory (2)
done

sent 29 bytes  received 20 bytes  98.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/aaefcfd1-5c95-11ed-8734-2e32217d8374/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
Command PhaseScriptExecution failed with a nonzero exit code

bulid script を修正(source=”$(readlink “${source}”)”を検索)

if [ -L "${source}" ]; then
  echo "Symlinked..."
  # source="$(readlink "${source}")"
  source="$(readlink -f "${source}")"
fi

source=”$(readlink “${source}”)”

source=”$(readlink -f “${source}”)”

ImageMagick なる外部ライブラリーがありこれを使おうかと色々調べたがあまりAndroid C#で利用している情報が見つからず結果断念。

https://github.com/MolotovCherry/Android-ImageMagick7

 

代わりに ImageSharp を利用することに

Visual Stuido の NuGet より、SixLabors.ImageSharp を選択して、Version 1.0.4 を指定してダウンロード

(最新だと、netstandard2.0  をサポートしていない?)

Package より netstandard2.0 フォルダーより以下のファイルをAssets/Plugins に保存

SixLabors.ImageSharp.dll
System.Numerics.Vectors.dll
System.Buffers.dll
System.Runtime.CompilerServices.Unsafe.dll
System.Memory.dll
System.Text.Encoding.CodePages.dll

あとは、Android でビルド

以下が画像を変換するコード(楽ちん)

  // 色々な画像をPNGに変換 
    public static byte[] ConvertToPNG(byte[] imageData)
    {
        using (var image = SixLabors.ImageSharp.Image.Load(imageData)) {
            using (var outputStream = new MemoryStream()) {
                image.Save(outputStream, new PngEncoder());
                return outputStream.ToArray();
            }
        }
    }

iOS でももちろん動作します。

The app references non-public selectors in Payload/*.app/Frameworks/UnityFramework.framework/UnityFramework: applicationWillFinishLaunchingWithOptions:, didReceiveRemoteNotification:

App ストアにアップすると謎エラー

 

ググると、Xcode のバグではないかと…

対処方法は、メソッド名を変更

didReceiveRemoteNotification -> didReceiveRemoteNotificationToUnity

applicationWillFinishLaunchingWithOptions も applicationWillFinishLaunchingWithOptionsToUnity に名前変更

 

Unity ver2020.3.38f1

xcode ver14.0.1

mac ver 12.6

 

一旦、エラーが消えてUP出来ていたが再度、謎エラー

The app references non-public selectors in Payload/*.app/Frameworks/UnityFramework.framework/UnityFramework: loadPlugink

最終的に、 xcode ver13.4.1  にDowngradeして無事アップ成功

Quickstart for Google Cardboard for Unity

https://developers.google.com/cardboard/develop/unity/quickstart

Unity ver.2020.3.38

Mac ver.12.6

Xcode ver.14.0.1

Google Cardboard のデモを iOS 用にビルドしたら以下のエラー

Showing Recent Messages
Undefined symbol: google::protobuf::MessageLite::ParseFromArray(void const*, int)
Undefined symbol: google::protobuf::RepeatedField<float>::InternalSwap(google::protobuf::RepeatedField<float>*)
Undefined symbol: google::protobuf::RepeatedField<float>::Add(float const&)
Undefined symbol: google::protobuf::RepeatedField<float>::Clear()
Undefined symbol: google::protobuf::RepeatedField<float>::MergeFrom(google::protobuf::RepeatedField<float> const&)
Undefined symbol: google::protobuf::RepeatedField<float>::RepeatedField(google::protobuf::Arena*)
Undefined symbol: google::protobuf::RepeatedField<float>::RepeatedField(google::protobuf::RepeatedField<float> const&)
Undefined symbol: google::protobuf::RepeatedField<float>::~RepeatedField()
Undefined symbol: google::protobuf::stringpiece_internal::StringPiece::LogFatalSizeTooBig(unsigned long, char const*)
Undefined symbol: google::protobuf::io::EpsCopyOutputStream::WriteRawFallback(void const*, int, unsigned char*)
Undefined symbol: google::protobuf::io::EpsCopyOutputStream::EnsureSpaceFallback(unsigned char*)
Undefined symbol: google::protobuf::io::EpsCopyOutputStream::WriteStringMaybeAliasedOutline(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned char*)
Undefined symbol: google::protobuf::Arena::AllocateAlignedWithHook(unsigned long, std::type_info const*)
Undefined symbol: google::protobuf::Arena::AllocateAlignedWithCleanup(unsigned long, std::type_info const*)
Undefined symbol: google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)
Undefined symbol: google::protobuf::internal::LogMessage::~LogMessage()
Undefined symbol: google::protobuf::internal::LogMessage::operator<<(char const*)
Undefined symbol: google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)
Undefined symbol: google::protobuf::internal::WriteVarint(unsigned int, unsigned long long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)
Undefined symbol: google::protobuf::internal::ArenaStringPtr::DestroyNoArenaSlowPath()
Undefined symbol: google::protobuf::internal::ArenaStringPtr::Set(google::protobuf::internal::ArenaStringPtr::EmptyDefault, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, google::protobuf::Arena*)
Undefined symbol: google::protobuf::internal::ArenaStringPtr::Mutable(google::protobuf::internal::ArenaStringPtr::EmptyDefault, google::protobuf::Arena*)
Undefined symbol: google::protobuf::internal::LookUpEnumName(google::protobuf::internal::EnumEntry const*, int const*, unsigned long, int)
Undefined symbol: google::protobuf::internal::LookUpEnumValue(google::protobuf::internal::EnumEntry const*, unsigned long, google::protobuf::stringpiece_internal::StringPiece, int*)
Undefined symbol: google::protobuf::internal::ReadTagFallback(char const*, unsigned int)
Undefined symbol: google::protobuf::internal::ThreadSafeArena::~ThreadSafeArena()
Undefined symbol: void google::protobuf::internal::InternalMetadata::DoMergeFrom<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Undefined symbol: void google::protobuf::internal::InternalMetadata::DoClear<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >()
Undefined symbol: google::protobuf::internal::PackedFloatParser(void*, char const*, google::protobuf::internal::ParseContext*)
Undefined symbol: google::protobuf::internal::UnknownFieldParse(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, char const*, google::protobuf::internal::ParseContext*)
Undefined symbol: google::protobuf::internal::VarintParseSlow64(char const*, unsigned int)
Undefined symbol: google::protobuf::internal::EpsCopyInputStream::DoneFallback(int, int)
Undefined symbol: google::protobuf::internal::InitializeEnumStrings(google::protobuf::internal::EnumEntry const*, int const*, unsigned long, google::protobuf::internal::ExplicitlyConstructed<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >*)
Undefined symbol: google::protobuf::internal::InitProtobufDefaultsSlow()
Undefined symbol: google::protobuf::internal::InlineGreedyStringParser(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, char const*, google::protobuf::internal::ParseContext*)
Undefined symbol: google::protobuf::internal::fixed_address_empty_string
Undefined symbol: google::protobuf::internal::init_protobuf_defaults_state
Undefined symbol: google::protobuf::MessageLite::InitializationErrorString() const
Undefined symbol: google::protobuf::RepeatedField<float>::Get(int) const
Undefined symbol: google::protobuf::RepeatedField<float>::data() const
Undefined symbol: google::protobuf::RepeatedField<float>::size() const
Undefined symbol: typeinfo for google::protobuf::MessageLite
Undefined symbol: vtable for google::protobuf::MessageLite

google::protobuf が見つからない

対応としては、iOS 用のビルドフォルダに移動

pod init
pod install

podfile を以下に変更

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Unity-iPhone' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Unity-iPhone

  target 'Unity-iPhone Tests' do
    inherit! :search_paths
    # Pods for testing
  end

end

target 'UnityFramework' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  # add
  pod 'Protobuf-C++', '3.18.0'

  # Pods for UnityFramework

end

# add
post_install do |installer|
  installer.pods_project.targets.each do |target|
    # print "target=", target, "\n"
    if target.name == "Protobuf-C++"
      target.build_configurations.each do |config|
        config.build_settings['HEADER_SEARCH_PATHS'] = '$(SRCROOT)/Protobuf-C++/src'
      end
    end
  end
end

xcworkspace が作成されるので以下のコマンドで open

pod update
open Unity-iPhone.xcworkspace

あとは、署名してビルド

 

appium desktop を起動してサーバを起動

appium inspector を起動

iOS

{
  "platformName": "iOS",
  "appium:udid": "0943D45A-B772-4C36-B738-2931C093D6F1",
  "appium:deviceName": "iPhone",
  "appium:platformVersion": "15"
}

Android

{
  "platformName": "Android"
}

Xcode を起動してプロジェクトを開く

Product  -> show build folder in finder から app ファイルを取得する

 

 

 

© 2024 Falco Tech Blog Suffusion theme by Sayontan Sinha