nstudio / nativescript-plugins

@nstudio/nativescript-* plugin workspace.
Apache License 2.0
52 stars 40 forks source link

[Camera-Plus] Error on initialize plugin on iOS #56

Open PabloPG opened 3 years ago

PabloPG commented 3 years ago

After installing the plugin and trying to run on iOS, I get the following error:

CONSOLE LOG: NativeScript-CameraPlus --- [CameraPlus createNativeView] CONSOLE LOG: NativeScript-CameraPlus --- [video enabled:, false] CONSOLE LOG: NativeScript-CameraPlus --- [default camera:, rear] CONSOLE LOG: NativeScript-CameraPlus --- [MySwifty viewdidload] CONSOLE LOG: NativeScript-CameraPlus --- [doubleTapCameraSwitch:, true] CONSOLE LOG: NativeScript-CameraPlus --- [this.cameraDelegate:, <SwiftyDelegate: 0x6000019f7df0>] CONSOLE LOG: NativeScript-CameraPlus --- [view:, <UIView: 0x7f9c4d145c10; frame = (0 0; 390 844); autoresize = W+H; layer = <CALayer: 0x600001b45fe0>>] CONSOLE LOG: NativeScript-CameraPlus --- [initNativeView.] CONSOLE LOG: NativeScript-CameraPlus --- [MySwifty viewWillAppear] CONSOLE LOG: NativeScript-CameraPlus --- [adding buttons...] CONSOLE LOG: NativeScript-CameraPlus --- [adding flash button...] CONSOLE LOG: NativeScript-CameraPlus --- [adding show gallery button...] CONSOLE LOG: NativeScript-CameraPlus --- [adding show capture button...] CONSOLE LOG: NativeScript-CameraPlus --- [MySwifty viewDidAppear] CONSOLE LOG: NativeScript-CameraPlus --- [xml width/height: 390x844] ====== Assertion failed ====== Native stack trace: 1 0x1079bb9ff tns::Assert(bool, v8::Isolate*) + 119 2 0x10799575f tns::MetadataBuilder::RegisterStaticMethods(v8::Local<v8::Context>, v8::Local<v8::Function>, tns::BaseClassMeta const*, tns::KnownUnknownClassPair, robin_hood::detail::Table<true, 80ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned char, robin_hood::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&) + 519 3 0x10799351d tns::MetadataBuilder::GetOrCreateConstructorFunctionTemplateInternal(v8::Local<v8::Context>, tns::BaseClassMeta const*, tns::KnownUnknownClassPair, robin_hood::detail::Table<true, 80ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned char, robin_hood::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&, robin_hood::detail::Table<true, 80ul, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned char, robin_hood::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::_<…> 4 0x10799173b tns::MetadataBuilder::GetOrCreateConstructorFunctionTemplate(v8::Local<v8::Context>, tns::BaseClassMeta const*, tns::KnownUnknownClassPair, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) + 99 5 0x1079de10e std::__1::function<v8::Local<v8::FunctionTemplate> (v8::Local<v8::Context>, tns::BaseClassMeta const*, tns::KnownUnknownClassPair, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)>::operator()(v8::Local<v8::Context>, tns::BaseClassMeta const*, tns::KnownUnknownClassPair, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) const + 54 6 0x10793fba5 tns::ArgConverter::CreateJsWrapper(v8::Local<v8::Context>, tns::BaseDataWrapper*, v8::Local<v8::Object>, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) + 1581 7 0x1079ddcb1 tns::Interop::GetResult(v8::Local<v8::Context>, tns::TypeEncoding const*, tns::BaseCall*, bool, std::__1::shared_ptr<v8::Persistent<v8::Value, v8::NonCopyablePersistentTraits<v8::Value> > >, bool, bool, bool, bool) + 4231 8 0x1079d9b41 tns::Interop::CallFunctionInternal(tns::MethodCall&) + 581 9 0x10793eed0 tns::ArgConverter::Invoke(v8::Local<v8::Context>, objc_class*, v8::Local<v8::Object>, tns::V8Args&, tns::MethodMeta const*, bool) + 758 10 0x1079966dc tns::MetadataBuilder::InvokeMethod(v8::Local<v8::Context>, tns::MethodMeta const*, v8::Local<v8::Object>, tns::V8Args&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) + 76 11 0x107996231 tns::MetadataBuilder::PropertyGetterCallback(v8::FunctionCallbackInfo<v8::Value> const&) + 245 12 0x107ae90a1 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) + 609 13 0x107ae858a v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) + 570 14 0x107ae7f20 v8::internal::Builtins::InvokeApiFunction(v8::internal::Isolate*, bool, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, v8::internal::Handle<v8::internal::HeapObject>) + 768 15 0x107eb8174 v8::internal::Object::GetPropertyWithAccessor(v8::internal::LookupIterator*) + 404 16 0x107eb78dd v8::internal::Object::GetProperty(v8::internal::LookupIterator*, bool) + 125 17 0x107cfec97 v8::internal::LoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, bool, v8::internal::Handle<v8::internal::Object>) + 1751 18 0x107d07be2 v8::internal::Runtime_LoadNoFeedbackIC_Miss(int, unsigned long*, v8::internal::Isolate*) + 322 19 0x1083be6d9 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit + 57 20 0x10843943e Builtins_LdaNamedPropertyHandler + 4062 JavaScript stack trace: at _onLayoutChangeFn (file: node_modules/@nstudio/nativescript-camera-plus/index.ios.js:754:0) at _handleEvent (file: node_modules/@nativescript/core/data/observable/index.js:233:0) at notify (file: node_modules/@nativescript/core/data/observable/index.js:216:0) at _raiseLayoutChangedEvent (file: node_modules/@nativescript/core/ui/core/view/view-common.js:319:0) at _setNativeViewFrame (file: node_modules/@nativescript/core/ui/core/view/index.ios.js:149:0) at layoutNativeView (file: node_modules/@nativescript/core/ui/core/view/index.ios.js:177:0) at layout (file: node_modules/@nativescript/core/ui/core/view/index.ios.js:69:0) at layoutChild (file: node_modules/@nativescript/core/ui/core/view/view-helper/view-helper-common.js:96:0) at layoutChild (file: node_modules/@nativescript/core/ui/core/view/view-common.js:731:8) at onLayout (file: node_modules/@nativescript/core/ui/layouts/grid-layout/index.ios.js:165:16)

✔ Getting NativeScript components versions information... ✔ Component nativescript has 8.0.2 version and is up to date. ✔ Component @nativescript/core has 8.0.8 version and is up to date. ✔ Component @nativescript/ios has 8.0.0 version and is up to date. ✔ Component @nativescript/android has 8.0.0 version and is up to date.

@nstudio/nativescript-camera-plus": "4.0.3",

PabloChiste commented 3 years ago

I found the cause Error occurs when calling 'CGRectMake' and 'setNeedsLayout' for previewLayer. After commenting the code the error stopped occurring. image

Bezlepkin commented 3 years ago

same issue...

linesharina commented 3 years ago

Same here...

Bezlepkin commented 3 years ago

I can share my code (modified plugin) You only need to connect it with your hands...

triniwiz commented 3 years ago

Please try updating your plugin and the runtime to the latest version

jamescodesthings commented 3 years ago

Had some pain here on nativescript 7.1.x, found that 4.1.0 was no good.

The solution for me (angular project) has been to use camera-plus@4.0.3 with the following: register-camera-plus.ts

import { registerElement } from '@nativescript/angular';
import { CameraPlus } from '@nstudio/nativescript-camera-plus';
import { CLog } from '@nstudio/nativescript-camera-plus/common';

/**
 * Registers camera plus with the workaround that makes it work
 * See https://github.com/nstudio/nativescript-plugins/issues/56
 *
 * Tested and working on 4.0.3 with iOS 15.x
 *
 * @todo once nativescript is at 8.x we should be able to get rid of this and just use camera-plus 4.1.0+
 */
export function registerCameraPlus() {
  try {
    /**
     * Attempt at fixing camera plus temporarily by stopping the bad stuff it does
     */
    class CameraPlusFixed extends CameraPlus {
      /**
       * The function that kicks out an error on 4.0.3 (compat with ns 7.x)
       * @param args Original function args
       */
      // eslint-disable-next-line @typescript-eslint/no-unused-vars
      _onLayoutChangeFn(args: any[]) {
        CLog('onLayoutChangeFn()');
        const size = this.getActualSize();
        CLog(`xml width/height: ${size.width}x${size.height}`);
        // @ts-ignore
        const { frame } = this._swifty.view;
        // @ts-ignore
        this._swifty.view.frame = CGRectMake(
          frame.origin.x,
          frame.origin.y,
          size.width,
          size.height,
        );
        // @ts-ignore
        this._swifty.view.setNeedsLayout();
      }
    }

    registerElement('CameraPlus', () => CameraPlusFixed);
  } catch (error) {
    CLog('Could not register CameraPlus', error);
  }
}

app.module.ts:

import { registerCameraPlus } from './register-camera-plus';

// ...

registerCameraPlus();

@NgModule(
  // ...
)
// ...

Thanks to @PabloChiste for the workaround details.

MariaC15 commented 3 years ago

same issue...

DevZatokio commented 2 years ago

same issue...