반응형

대충 아래와 같은 오류를 만났을 때,,

lovapi@lovapis-Mac-mini ~ % sudo gem install cocoapods

Building native extensions. This could take a while...

ERROR:  Error installing cocoapods:

ERROR: Failed to build gem native extension.

 

    current directory: /Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2/ext/ffi_c

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20210225-19559-1cs3w9s.rb extconf.rb

checking for ffi.h... *** extconf.rb failed ***

Could not create Makefile due to some reason, probably lack of necessary

libraries and/or headers.  Check the mkmf.log file for more details.  You may

need configuration options.

 

Provided configuration options:

--with-opt-dir

--without-opt-dir

--with-opt-include

--without-opt-include=${opt-dir}/include

--with-opt-lib

--without-opt-lib=${opt-dir}/lib

--with-make-prog

--without-make-prog

--srcdir=.

--curdir

--ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/$(RUBY_BASE_NAME)

--with-ffi_c-dir

--without-ffi_c-dir

--with-ffi_c-include

--without-ffi_c-include=${ffi_c-dir}/include

--with-ffi_c-lib

--without-ffi_c-lib=${ffi_c-dir}/lib

--enable-system-libffi

--disable-system-libffi

--with-libffi-config

--without-libffi-config

--with-pkg-config

--without-pkg-config

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:467:in `try_do': The compiler failed to generate an executable file. (RuntimeError)

You have to install development tools first.

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:585:in `block in try_compile'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:534:in `with_werror'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:585:in `try_compile'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:1109:in `block in have_header'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:959:in `block in checking_for'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:361:in `block (2 levels) in postpone'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:331:in `open'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:361:in `block in postpone'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:331:in `open'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:357:in `postpone'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:958:in `checking_for'

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/mkmf.rb:1108:in `have_header'

from extconf.rb:10:in `system_libffi_usable?'

from extconf.rb:42:in `<main>'

 

To see why this extension failed to compile, please check the mkmf.log which can be found here:

 

  /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-19/2.6.0/ffi-1.14.2/mkmf.log

 

extconf failed, exit code 1

 

Gem files will remain installed in /Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2 for inspection.

Results logged to /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-19/2.6.0/ffi-1.14.2/gem_make.out

대충 로그 파일을 보면...

 

요모양인데... 

package configuration for libffi is not found

"xcrun clang -o conftest -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin19 -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/backward -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c  -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib -L. -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.Internal.sdk/usr/local/lib   -arch x86_64   -lruby.2.6   "

In file included from conftest.c:1:

In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby.h:33:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:24:10: fatal error: 'ruby/config.h' file not found

#include "ruby/config.h"

         ^~~~~~~~~~~~~~~

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:24:10: note: did not find header 'config.h' in framework 'ruby' (loaded from '/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks')

1 error generated.

checked program was:

/* begin */

1: #include "ruby.h"

2:

3: int main(int argc, char **argv)

4: {

5:   return 0;

6: }

/* end */

 

어떻게 해결하냐면...

 

저 모듈을 깔거나... (하지만 또 다른데서 오류가 날 수 도 있으니까...)

 

아몰랑 루비 업뎃 ㄱㄱ! (이게 빠른 방법 되시겠다)

 

lovapi@lovapis-Mac-mini ~ % curl -L https://get.rvm.io | bash -s stable
lovapi@lovapis-Mac-mini ~ % source /Users/lovapi/.rvm/scripts/rvm     #(주황색은 본인 아이디로 치환)
lovapi@lovapis-Mac-mini ~ % rvm install ruby-2.7.2
lovapi@lovapis-Mac-mini ~ % sudo gem install cocoapods

조금 오래 걸리지만..

 

끝!

 

반응형
반응형

대충 아래와 같은 오류를 만났을 때,,

lovapi@lovapis-Mac-mini ios % pod install

Analyzing dependencies

Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`

Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`

Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec`

Downloading dependencies

Installing CocoaAsyncSocket (7.6.5)

Installing DoubleConversion (1.1.6)

Installing FBLazyVector (0.63.4)

Installing FBReactNativeSpec (0.63.4)

Installing Flipper (0.54.0)

Installing Flipper-DoubleConversion (1.1.7)

Installing Flipper-Folly (2.5.1)

Installing Flipper-Glog (0.3.6)

[!] /bin/bash -c 

set -e

#!/bin/bash

# Copyright (c) Facebook, Inc. and its affiliates.

#

# This source code is licensed under the MIT license found in the

# LICENSE file in the root directory of this source tree.

 

set -e

 

PLATFORM_NAME="${PLATFORM_NAME:-iphoneos}"

CURRENT_ARCH="${CURRENT_ARCH}"

 

if [ -z "$CURRENT_ARCH" ] || [ "$CURRENT_ARCH" == "undefined_arch" ]; then

    # Xcode 10 beta sets CURRENT_ARCH to "undefined_arch", this leads to incorrect linker arg.

    # it's better to rely on platform name as fallback because architecture differs between simulator and device

 

    if [[ "$PLATFORM_NAME" == *"simulator"* ]]; then

        CURRENT_ARCH="x86_64"

    else

        CURRENT_ARCH="armv7"

    fi

fi

 

export CC="$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)"

export CXX="$CC"

 

# Remove automake symlink if it exists

if [ -h "test-driver" ]; then

    rm test-driver

fi

 

./configure --host arm-apple-darwin

 

# Fix build for tvOS

cat << EOF >> src/config.h

/* Add in so we have Apple Target Conditionals */

#ifdef __APPLE__

#include <TargetConditionals.h>

#include <Availability.h>

#endif

/* Special configuration for AppleTVOS */

#if TARGET_OS_TV

#undef HAVE_SYSCALL_H

#undef HAVE_SYS_SYSCALL_H

#undef OS_MACOSX

#endif

/* Special configuration for ucontext */

#undef HAVE_UCONTEXT_H

#undef PC_FROM_UCONTEXT

#if defined(__x86_64__)

#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip

#elif defined(__i386__)

#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip

#endif

EOF

 

# Prepare exported header include

EXPORTED_INCLUDE_DIR="exported/glog"

mkdir -p exported/glog

cp -f src/glog/log_severity.h "$EXPORTED_INCLUDE_DIR/"

cp -f src/glog/logging.h "$EXPORTED_INCLUDE_DIR/"

cp -f src/glog/raw_logging.h "$EXPORTED_INCLUDE_DIR/"

cp -f src/glog/stl_logging.h "$EXPORTED_INCLUDE_DIR/"

cp -f src/glog/vlog_is_on.h "$EXPORTED_INCLUDE_DIR/"

 

checking for a BSD-compatible install... /usr/local/bin/ginstall -c

checking whether build environment is sane... yes

checking for arm-apple-darwin-strip... no

checking for strip... strip

checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p

checking for gawk... no

checking for mawk... no

checking for nawk... no

checking for awk... awk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking for arm-apple-darwin-gcc... /Library/Developer/CommandLineTools/usr/bin/cc -arch armv7 -isysroot 

checking whether the C compiler works... no

xcrun: error: SDK "iphoneos" cannot be located

xcrun: error: SDK "iphoneos" cannot be located

xcrun: error: SDK "iphoneos" cannot be located

xcrun: error: unable to lookup item 'Path' in SDK 'iphoneos'

/Users/lovapi/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6/missing: Unknown `--is-lightweight' option

Try `/Users/lovapi/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6/missing --help' for more information

configure: WARNING: 'missing' script is too old or missing

configure: error: in `/Users/lovapi/Library/Caches/CocoaPods/Pods/Release/Flipper-Glog/0.3.6-1dfd6':

configure: error: C compiler cannot create executables

See `config.log' for more details

 

 

요로케 

lovapi@lovapis-Mac-mini ios % sudo xcode-select --switch /Applications/Xcode.app
lovapi@lovapis-Mac-mini ios % pod install

반응형
반응형

iOS 4까지는 아래의 코드로 호출 된 경우 아무 문제없이 동작합니다.

-(IBAtion) callPhotoAlbum
{
  [self callPickerContoller:self delegate:self];
}

-(BOOL) callPickerController:(UIViewControler*)c delegate:(id<UIImagePickerControllerDelegate, UINavigationControllerDelegate>) d
{
  UIImagePickerController* picker = [[UIImagePickerController alloc]init];
  picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotoAlbum];
  picker.delegate = d;
  [c presentModalViewController:picker animate:YES];
  return YES;
}

- (void) imagePickerController: (UIImagePicekrController*) picker didFinishPickingMediaWithInfo:(NSDictionary*) info
{
   // TODO Something...
  [[picker parentViewController] dismissModalViewControllerAnimated:YES];
}

iOS 5에서는 위 코드로 호출은 가능하나 사진선택 모달뷰가 dismiss되지 않습니다.
ARC와 관련이 있는것인가? 라고 생각해 봤지만, 글쎄요...
혹시나 해서 picker를 전역변수로 빼서 동기화해서 사용해보았지만 그래도 되지 않습니다.

여러가지 방법으로 테스트와 디버깅 분석 해본결과
다른 메서드로 핸들(self)을 넘겨줄 때 잃어버리는 것 같습니다.

따라서 아래와 같이 변경하시면 동작합니다.

-(IBAtion) callPhotoAlbum
{
  [self callPickerContoller];
}

-(BOOL) callPickerController
{
  UIImagePickerController* picker = [[UIImagePickerController alloc]init];
  picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotoAlbum];
  picker.delegate = self;
  [self presentModalViewController:picker animate:YES];
  return YES;
}

- (void) imagePickerController: (UIImagePicekrController*) picker didFinishPickingMediaWithInfo:(NSDictionary*) info
{
  // TODO Something...
  [self dismissModalViewControllerAnimated:YES];
}

핸들을 잃는다...
MFC에서 특정 이벤트에서 가끔 보던 증상이네요
물론 MFC야 핸들을 직접 찾아 넘겨주거나 theApp를 전역화 해서 사용하는 꼼수들을 부렸지만(c/c++의 범위니 꼼수도 능력일지도)
self자체를 넘겨줌에도 불구하고 잃어버리게 되는군요. 추후 수정이 될지 모르니 위와같은 방식을 이용하셔야 할 것 같습니다.
흠... 다른 프레임웤에서 잃어버린 10년을 되찾은 느낌이군요.

도움이 되셨길 빕니다.
반응형

+ Recent posts