Flutter TFLite Errors

0

이번 프로젝트에 TFLite패키지를 사용하게 되었다.

세팅 과정에서 겪은 여러가지 디버깅 방법들을 모아본다.

Environment

MacBook Air M1
MacOS Monterey 12.0.1
XCode 13.1
Flutter 2.5.3

에러들

0-1.기본루틴

a) Podfile.lock, Pods folder, .symlinks 폴더 삭제
b) flutter clean
c) flutter run

0-2. Dependency가 바뀌지 않을때

tflite 다운그레이드 할 경우 정작 podfile.lock에 가보면 버전이 그대로였다.
Podfile.lock 자체는 Podfile에 의하여 생기는 파일임으로 lock파일을 바꾸는건 옳지 않은것 같다.
Podfile에서 TensorFlowLiteC에 대해 직접 버전을 정할 수 있다. 이 방법을 사용하자.

tflite의 경우 symlinks/plugins/tflite/ios/tflite.podspec 에서 버전이 표기 되니 원하는 버전이 들어간건지 확인 할 수 있다.


생성된 lock파일에서도 버전을 확인 할 수 있다.

1.fatal error: 'Flutter/Flutter.h' file not found

flutter_additional_ios_build_settings(target) 줄을 podfile에 추가해준다

post_install do |installer|
	installer.pods_project.targets.each do |target|
	flutter_additional_ios_build_settings(target)
		target.build_configurations.each do |config|
            	config.build_settings['ENABLE_BITCODE'] = 'NO'
		end
	end
end

2. metal_delegate.h not found

Podfile에 TensorFlowLiteC 2.2.0 로 직접 변경
밑에 사진 참조

3. vector.h not found

xcode build setting -> compile source as objective c++
밑에 사진 참조

4. arm64 linking object fail


...building for iOS Simulator, but linking in object file built for iOS, file
...for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

xcode build setting-> excluded architechture -> arm64 추가
밑에 사진 참조

빌드 성공 상태

Podfile.lock

PODS:
  - abseil/algorithm (0.20200225.0):
    - abseil/algorithm/algorithm (= 0.20200225.0)
    - abseil/algorithm/container (= 0.20200225.0)
  - abseil/algorithm/algorithm (0.20200225.0):
    - abseil/base/config
  - abseil/algorithm/container (0.20200225.0):
    - abseil/algorithm/algorithm
    - abseil/base/core_headers
    - abseil/meta/type_traits
  - abseil/base (0.20200225.0):
    - abseil/base/atomic_hook (= 0.20200225.0)
    - abseil/base/base (= 0.20200225.0)
    - abseil/base/base_internal (= 0.20200225.0)
    - abseil/base/bits (= 0.20200225.0)
    - abseil/base/config (= 0.20200225.0)
    - abseil/base/core_headers (= 0.20200225.0)
    - abseil/base/dynamic_annotations (= 0.20200225.0)
    - abseil/base/endian (= 0.20200225.0)
    - abseil/base/errno_saver (= 0.20200225.0)
    - abseil/base/exponential_biased (= 0.20200225.0)
    - abseil/base/log_severity (= 0.20200225.0)
    - abseil/base/malloc_internal (= 0.20200225.0)
    - abseil/base/periodic_sampler (= 0.20200225.0)
    - abseil/base/pretty_function (= 0.20200225.0)
    - abseil/base/raw_logging_internal (= 0.20200225.0)
    - abseil/base/spinlock_wait (= 0.20200225.0)
    - abseil/base/throw_delegate (= 0.20200225.0)
  - abseil/base/atomic_hook (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/base/base (0.20200225.0):
    - abseil/base/atomic_hook
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/log_severity
    - abseil/base/raw_logging_internal
    - abseil/base/spinlock_wait
    - abseil/meta/type_traits
  - abseil/base/base_internal (0.20200225.0):
    - abseil/base/config
    - abseil/meta/type_traits
  - abseil/base/bits (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/base/config (0.20200225.0)
  - abseil/base/core_headers (0.20200225.0):
    - abseil/base/config
  - abseil/base/dynamic_annotations (0.20200225.0)
  - abseil/base/endian (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/base/errno_saver (0.20200225.0):
    - abseil/base/config
  - abseil/base/exponential_biased (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/base/log_severity (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/base/malloc_internal (0.20200225.0):
    - abseil/base/base
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/raw_logging_internal
  - abseil/base/periodic_sampler (0.20200225.0):
    - abseil/base/core_headers
    - abseil/base/exponential_biased
  - abseil/base/pretty_function (0.20200225.0)
  - abseil/base/raw_logging_internal (0.20200225.0):
    - abseil/base/atomic_hook
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/log_severity
  - abseil/base/spinlock_wait (0.20200225.0):
    - abseil/base/base_internal
    - abseil/base/core_headers
    - abseil/base/errno_saver
  - abseil/base/throw_delegate (0.20200225.0):
    - abseil/base/config
    - abseil/base/raw_logging_internal
  - abseil/container/common (0.20200225.0):
    - abseil/meta/type_traits
    - abseil/types/optional
  - abseil/container/compressed_tuple (0.20200225.0):
    - abseil/utility/utility
  - abseil/container/container_memory (0.20200225.0):
    - abseil/memory/memory
    - abseil/utility/utility
  - abseil/container/fixed_array (0.20200225.0):
    - abseil/algorithm/algorithm
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/throw_delegate
    - abseil/container/compressed_tuple
    - abseil/memory/memory
  - abseil/container/flat_hash_map (0.20200225.0):
    - abseil/algorithm/container
    - abseil/container/container_memory
    - abseil/container/hash_function_defaults
    - abseil/container/raw_hash_map
    - abseil/memory/memory
  - abseil/container/hash_function_defaults (0.20200225.0):
    - abseil/base/config
    - abseil/hash/hash
    - abseil/strings/strings
  - abseil/container/hash_policy_traits (0.20200225.0):
    - abseil/meta/type_traits
  - abseil/container/hashtable_debug_hooks (0.20200225.0):
    - abseil/base/config
  - abseil/container/hashtablez_sampler (0.20200225.0):
    - abseil/base/base
    - abseil/base/core_headers
    - abseil/base/exponential_biased
    - abseil/container/have_sse
    - abseil/debugging/stacktrace
    - abseil/memory/memory
    - abseil/synchronization/synchronization
    - abseil/utility/utility
  - abseil/container/have_sse (0.20200225.0)
  - abseil/container/inlined_vector (0.20200225.0):
    - abseil/algorithm/algorithm
    - abseil/base/core_headers
    - abseil/base/throw_delegate
    - abseil/container/inlined_vector_internal
    - abseil/memory/memory
  - abseil/container/inlined_vector_internal (0.20200225.0):
    - abseil/base/core_headers
    - abseil/container/compressed_tuple
    - abseil/memory/memory
    - abseil/meta/type_traits
    - abseil/types/span
  - abseil/container/layout (0.20200225.0):
    - abseil/base/core_headers
    - abseil/meta/type_traits
    - abseil/strings/strings
    - abseil/types/span
    - abseil/utility/utility
  - abseil/container/raw_hash_map (0.20200225.0):
    - abseil/base/throw_delegate
    - abseil/container/container_memory
    - abseil/container/raw_hash_set
  - abseil/container/raw_hash_set (0.20200225.0):
    - abseil/base/bits
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/endian
    - abseil/container/common
    - abseil/container/compressed_tuple
    - abseil/container/container_memory
    - abseil/container/hash_policy_traits
    - abseil/container/hashtable_debug_hooks
    - abseil/container/hashtablez_sampler
    - abseil/container/have_sse
    - abseil/container/layout
    - abseil/memory/memory
    - abseil/meta/type_traits
    - abseil/utility/utility
  - abseil/debugging/debugging_internal (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/errno_saver
    - abseil/base/raw_logging_internal
  - abseil/debugging/demangle_internal (0.20200225.0):
    - abseil/base/base
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/debugging/stacktrace (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/debugging/debugging_internal
  - abseil/debugging/symbolize (0.20200225.0):
    - abseil/base/base
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/malloc_internal
    - abseil/base/raw_logging_internal
    - abseil/debugging/debugging_internal
    - abseil/debugging/demangle_internal
  - abseil/hash/city (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/endian
  - abseil/hash/hash (0.20200225.0):
    - abseil/base/core_headers
    - abseil/base/endian
    - abseil/container/fixed_array
    - abseil/hash/city
    - abseil/meta/type_traits
    - abseil/numeric/int128
    - abseil/strings/strings
    - abseil/types/optional
    - abseil/types/variant
    - abseil/utility/utility
  - abseil/memory (0.20200225.0):
    - abseil/memory/memory (= 0.20200225.0)
  - abseil/memory/memory (0.20200225.0):
    - abseil/base/core_headers
    - abseil/meta/type_traits
  - abseil/meta (0.20200225.0):
    - abseil/meta/type_traits (= 0.20200225.0)
  - abseil/meta/type_traits (0.20200225.0):
    - abseil/base/config
  - abseil/numeric/int128 (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
  - abseil/strings/internal (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/endian
    - abseil/base/raw_logging_internal
    - abseil/meta/type_traits
  - abseil/strings/str_format (0.20200225.0):
    - abseil/strings/str_format_internal
  - abseil/strings/str_format_internal (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/meta/type_traits
    - abseil/numeric/int128
    - abseil/strings/strings
    - abseil/types/span
  - abseil/strings/strings (0.20200225.0):
    - abseil/base/base
    - abseil/base/bits
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/endian
    - abseil/base/raw_logging_internal
    - abseil/base/throw_delegate
    - abseil/memory/memory
    - abseil/meta/type_traits
    - abseil/numeric/int128
    - abseil/strings/internal
  - abseil/synchronization/graphcycles_internal (0.20200225.0):
    - abseil/base/base
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/malloc_internal
    - abseil/base/raw_logging_internal
  - abseil/synchronization/kernel_timeout_internal (0.20200225.0):
    - abseil/base/core_headers
    - abseil/base/raw_logging_internal
    - abseil/time/time
  - abseil/synchronization/synchronization (0.20200225.0):
    - abseil/base/atomic_hook
    - abseil/base/base
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/base/dynamic_annotations
    - abseil/base/malloc_internal
    - abseil/base/raw_logging_internal
    - abseil/debugging/stacktrace
    - abseil/debugging/symbolize
    - abseil/synchronization/graphcycles_internal
    - abseil/synchronization/kernel_timeout_internal
    - abseil/time/time
  - abseil/time (0.20200225.0):
    - abseil/time/internal (= 0.20200225.0)
    - abseil/time/time (= 0.20200225.0)
  - abseil/time/internal (0.20200225.0):
    - abseil/time/internal/cctz (= 0.20200225.0)
  - abseil/time/internal/cctz (0.20200225.0):
    - abseil/time/internal/cctz/civil_time (= 0.20200225.0)
    - abseil/time/internal/cctz/time_zone (= 0.20200225.0)
  - abseil/time/internal/cctz/civil_time (0.20200225.0):
    - abseil/base/config
  - abseil/time/internal/cctz/time_zone (0.20200225.0):
    - abseil/base/config
    - abseil/time/internal/cctz/civil_time
  - abseil/time/time (0.20200225.0):
    - abseil/base/base
    - abseil/base/core_headers
    - abseil/base/raw_logging_internal
    - abseil/numeric/int128
    - abseil/strings/strings
    - abseil/time/internal/cctz/civil_time
    - abseil/time/internal/cctz/time_zone
  - abseil/types (0.20200225.0):
    - abseil/types/any (= 0.20200225.0)
    - abseil/types/bad_any_cast (= 0.20200225.0)
    - abseil/types/bad_any_cast_impl (= 0.20200225.0)
    - abseil/types/bad_optional_access (= 0.20200225.0)
    - abseil/types/bad_variant_access (= 0.20200225.0)
    - abseil/types/compare (= 0.20200225.0)
    - abseil/types/optional (= 0.20200225.0)
    - abseil/types/span (= 0.20200225.0)
    - abseil/types/variant (= 0.20200225.0)
  - abseil/types/any (0.20200225.0):
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/meta/type_traits
    - abseil/types/bad_any_cast
    - abseil/utility/utility
  - abseil/types/bad_any_cast (0.20200225.0):
    - abseil/base/config
    - abseil/types/bad_any_cast_impl
  - abseil/types/bad_any_cast_impl (0.20200225.0):
    - abseil/base/config
    - abseil/base/raw_logging_internal
  - abseil/types/bad_optional_access (0.20200225.0):
    - abseil/base/config
    - abseil/base/raw_logging_internal
  - abseil/types/bad_variant_access (0.20200225.0):
    - abseil/base/config
    - abseil/base/raw_logging_internal
  - abseil/types/compare (0.20200225.0):
    - abseil/base/core_headers
    - abseil/meta/type_traits
  - abseil/types/optional (0.20200225.0):
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/memory/memory
    - abseil/meta/type_traits
    - abseil/types/bad_optional_access
    - abseil/utility/utility
  - abseil/types/span (0.20200225.0):
    - abseil/algorithm/algorithm
    - abseil/base/core_headers
    - abseil/base/throw_delegate
    - abseil/meta/type_traits
  - abseil/types/variant (0.20200225.0):
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/base/core_headers
    - abseil/meta/type_traits
    - abseil/types/bad_variant_access
    - abseil/utility/utility
  - abseil/utility/utility (0.20200225.0):
    - abseil/base/base_internal
    - abseil/base/config
    - abseil/meta/type_traits
  - BoringSSL-GRPC (0.0.7):
    - BoringSSL-GRPC/Implementation (= 0.0.7)
    - BoringSSL-GRPC/Interface (= 0.0.7)
  - BoringSSL-GRPC/Implementation (0.0.7):
    - BoringSSL-GRPC/Interface (= 0.0.7)
  - BoringSSL-GRPC/Interface (0.0.7)
  - cloud_firestore (2.5.4):
    - Firebase/Firestore (= 8.9.0)
    - firebase_core
    - Flutter
  - Firebase/Auth (8.9.0):
    - Firebase/CoreOnly
    - FirebaseAuth (~> 8.9.0)
  - Firebase/CoreOnly (8.9.0):
    - FirebaseCore (= 8.9.0)
  - Firebase/Firestore (8.9.0):
    - Firebase/CoreOnly
    - FirebaseFirestore (~> 8.9.0)
  - firebase_auth (3.2.0):
    - Firebase/Auth (= 8.9.0)
    - firebase_core
    - Flutter
  - firebase_core (1.10.0):
    - Firebase/CoreOnly (= 8.9.0)
    - Flutter
  - FirebaseAuth (8.9.0):
    - FirebaseCore (~> 8.0)
    - GoogleUtilities/AppDelegateSwizzler (~> 7.6)
    - GoogleUtilities/Environment (~> 7.6)
    - GTMSessionFetcher/Core (~> 1.5)
  - FirebaseCore (8.9.0):
    - FirebaseCoreDiagnostics (~> 8.0)
    - GoogleUtilities/Environment (~> 7.6)
    - GoogleUtilities/Logger (~> 7.6)
  - FirebaseCoreDiagnostics (8.9.0):
    - GoogleDataTransport (~> 9.1)
    - GoogleUtilities/Environment (~> 7.6)
    - GoogleUtilities/Logger (~> 7.6)
    - nanopb (~> 2.30908.0)
  - FirebaseFirestore (8.9.1):
    - abseil/algorithm (= 0.20200225.0)
    - abseil/base (= 0.20200225.0)
    - abseil/container/flat_hash_map (= 0.20200225.0)
    - abseil/memory (= 0.20200225.0)
    - abseil/meta (= 0.20200225.0)
    - abseil/strings/strings (= 0.20200225.0)
    - abseil/time (= 0.20200225.0)
    - abseil/types (= 0.20200225.0)
    - FirebaseCore (~> 8.0)
    - "gRPC-C++ (~> 1.28.0)"
    - leveldb-library (~> 1.22)
    - nanopb (~> 2.30908.0)
  - Flutter (1.0.0)
  - GoogleDataTransport (9.1.2):
    - GoogleUtilities/Environment (~> 7.2)
    - nanopb (~> 2.30908.0)
    - PromisesObjC (< 3.0, >= 1.2)
  - GoogleUtilities/AppDelegateSwizzler (7.6.0):
    - GoogleUtilities/Environment
    - GoogleUtilities/Logger
    - GoogleUtilities/Network
  - GoogleUtilities/Environment (7.6.0):
    - PromisesObjC (< 3.0, >= 1.2)
  - GoogleUtilities/Logger (7.6.0):
    - GoogleUtilities/Environment
  - GoogleUtilities/Network (7.6.0):
    - GoogleUtilities/Logger
    - "GoogleUtilities/NSData+zlib"
    - GoogleUtilities/Reachability
  - "GoogleUtilities/NSData+zlib (7.6.0)"
  - GoogleUtilities/Reachability (7.6.0):
    - GoogleUtilities/Logger
  - "gRPC-C++ (1.28.2)":
    - "gRPC-C++/Implementation (= 1.28.2)"
    - "gRPC-C++/Interface (= 1.28.2)"
  - "gRPC-C++/Implementation (1.28.2)":
    - abseil/container/inlined_vector (= 0.20200225.0)
    - abseil/memory/memory (= 0.20200225.0)
    - abseil/strings/str_format (= 0.20200225.0)
    - abseil/strings/strings (= 0.20200225.0)
    - abseil/types/optional (= 0.20200225.0)
    - "gRPC-C++/Interface (= 1.28.2)"
    - gRPC-Core (= 1.28.2)
  - "gRPC-C++/Interface (1.28.2)"
  - gRPC-Core (1.28.2):
    - gRPC-Core/Implementation (= 1.28.2)
    - gRPC-Core/Interface (= 1.28.2)
  - gRPC-Core/Implementation (1.28.2):
    - abseil/container/inlined_vector (= 0.20200225.0)
    - abseil/memory/memory (= 0.20200225.0)
    - abseil/strings/str_format (= 0.20200225.0)
    - abseil/strings/strings (= 0.20200225.0)
    - abseil/types/optional (= 0.20200225.0)
    - BoringSSL-GRPC (= 0.0.7)
    - gRPC-Core/Interface (= 1.28.2)
  - gRPC-Core/Interface (1.28.2)
  - GTMSessionFetcher/Core (1.7.0)
  - image_picker (0.0.1):
    - Flutter
  - leveldb-library (1.22.1)
  - nanopb (2.30908.0):
    - nanopb/decode (= 2.30908.0)
    - nanopb/encode (= 2.30908.0)
  - nanopb/decode (2.30908.0)
  - nanopb/encode (2.30908.0)
  - PromisesObjC (2.0.0)
  - TensorFlowLiteC (2.2.0)
  - tflite (1.0.5):
    - Flutter
    - TensorFlowLiteC

DEPENDENCIES:
  - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`)
  - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
  - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
  - Flutter (from `Flutter`)
  - image_picker (from `.symlinks/plugins/image_picker/ios`)
  - TensorFlowLiteC (= 2.2.0)
  - tflite (from `.symlinks/plugins/tflite/ios`)

SPEC REPOS:
  trunk:
    - abseil
    - BoringSSL-GRPC
    - Firebase
    - FirebaseAuth
    - FirebaseCore
    - FirebaseCoreDiagnostics
    - FirebaseFirestore
    - GoogleDataTransport
    - GoogleUtilities
    - "gRPC-C++"
    - gRPC-Core
    - GTMSessionFetcher
    - leveldb-library
    - nanopb
    - PromisesObjC
    - TensorFlowLiteC

EXTERNAL SOURCES:
  cloud_firestore:
    :path: ".symlinks/plugins/cloud_firestore/ios"
  firebase_auth:
    :path: ".symlinks/plugins/firebase_auth/ios"
  firebase_core:
    :path: ".symlinks/plugins/firebase_core/ios"
  Flutter:
    :path: Flutter
  image_picker:
    :path: ".symlinks/plugins/image_picker/ios"
  tflite:
    :path: ".symlinks/plugins/tflite/ios"

SPEC CHECKSUMS:
  abseil: 6c8eb7892aefa08d929b39f9bb108e5367e3228f
  BoringSSL-GRPC: 8edf627ee524575e2f8d19d56f068b448eea3879
  cloud_firestore: 0c744725c0d1544d77db2c8eb35ef919cb19a176
  Firebase: 13d8d96499e2635428d5bf0ec675df21f95d9a95
  firebase_auth: 0d56cc4d105ff70d1547a7fcb10ee574ad05adf5
  firebase_core: f770e033e790657b3505f04be4cb24c482912f11
  FirebaseAuth: 2b78b2a32c07b3ecfa4970bdf1d3632b8304099b
  FirebaseCore: 599ee609343eaf4941bd188f85e3aa077ffe325b
  FirebaseCoreDiagnostics: 5daa63f1c1409d981a2d5007daa100b36eac6a34
  FirebaseFirestore: 15ae9648476436efed698a909e44c4737498f9b4
  Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
  GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940
  GoogleUtilities: 684ee790a24f73ebb2d1d966e9711c203f2a4237
  "gRPC-C++": 13d8ccef97d5c3c441b7e3c529ef28ebee86fad2
  gRPC-Core: 4afa11bfbedf7cdecd04de535a9e046893404ed5
  GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
  image_picker: 9aa50e1d8cdacdbed739e925b7eea16d014367e6
  leveldb-library: 50c7b45cbd7bf543c81a468fe557a16ae3db8729
  nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
  PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
  TensorFlowLiteC: b3ab9e867b0b71052ca102a32a786555b330b02e
  tflite: 9f7585b2241913a85c76a7c0154ce99669b9109d

PODFILE CHECKSUM: 751a61ab1bc8e2d1f5f5c0299b76eeab98db4e0c

COCOAPODS: 1.11.2

Podfile

# Uncomment this line to define a global platform for your project
platform :ios, '14.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  use_frameworks!
  use_modular_headers!

  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
  installer.pods_project.targets.each do |target|
  flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
    end
  end
end
pod 'TensorFlowLiteC', '2.2.0'

XCode Build Settings

Compile Sources As objective-C++

Excluded Architechtures +arm64

0개의 댓글