cocos2d / cocos2d-x

Cocos2d-x is a suite of open-source, cross-platform, game-development tools utilized by millions of developers across the globe. Its core has evolved to serve as the foundation for Cocos Creator 1.x & 2.x.
https://www.cocos.com/en/cocos2d-x
18.02k stars 7.05k forks source link

iOS support broken? #20713

Open kstenerud opened 2 years ago

kstenerud commented 2 years ago

Steps to Reproduce:

  1. Download and extract http://cocos2d-x.org/filedown/cocos2d-x-v4.0
  2. Follow the README.md instructions:
    $ cd cocos2d-x
    $ ./setup.py
    $ source FILE_TO_SAVE_SYSTEM_VARIABLE
    $ cocos new MyGame -p com.your_company.mygame -l cpp -d NEW_PROJECTS_DIR
    $ cd NEW_PROJECTS_DIR/MyGame
    $ mkdir build
    $ cd build
    $ cocos run --proj-dir .. -p [mac|windows|android|linux|ios]

In my case: cocos run --proj-dir .. -p ios

Result:

...
Ld /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/Objects-normal/i386/Binary/MyGame normal i386 (in target 'MyGame' from project 'MyGame')
    cd /Users/karl/tmp/cocos-example/MyGame
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -target i386-apple-ios8.0-simulator -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk -L/Users/karl/tmp/cocos-example/MyGame/ios-build/bin/MyGame/Debug -F/Users/karl/tmp/cocos-example/MyGame/ios-build/bin/MyGame/Debug -filelist /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/Objects-normal/i386/MyGame.LinkFileList -dead_strip -Xlinker -object_path_lto -Xlinker /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/Objects-normal/i386/MyGame_lto.o -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -fobjc-link-runtime -L/usr/local/opt/openssl/lib -Wl,-headerpad_max_install_names /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libcocos2d.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libexternal.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/Box2D/prebuilt/ios/libbox2d.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/chipmunk/prebuilt/ios/libchipmunk.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/freetype2/prebuilt/ios/libfreetype.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_recast.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libLinearMath.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libBulletDynamics.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libBulletCollision.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libLinearMath.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libBulletMultiThreaded.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/bullet/prebuilt/ios/libMiniCL.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/jpeg/prebuilt/ios/libjpeg.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/webp/prebuilt/ios/libwebp.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/websockets/prebuilt/ios/libwebsockets.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/openssl/prebuilt/ios/libssl.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/openssl/prebuilt/ios/libcrypto.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/uv/prebuilt/ios/libuv_a.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_tinyxml2.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_xxhash.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_xxtea.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_clipper.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_edtaa3func.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_convertUTF.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_poly2tri.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_md5.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/curl/prebuilt/ios/libcurl.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/png/prebuilt/ios/libpng.a /Users/karl/tmp/cocos-example/MyGame/ios-build/lib/Debug/libext_unzip.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/glsl-optimizer/prebuilt/ios/libglcpp-library.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/glsl-optimizer/prebuilt/ios/libglsl_optimizer.a /Users/karl/tmp/cocos-example/MyGame/cocos2d/external/glsl-optimizer/prebuilt/ios/libmesa.a -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework UIKit -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework OpenGLES -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework CoreMotion -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework AVKit -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework CoreMedia -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework CoreText -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework Security -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework CoreGraphics -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework AVFoundation -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework WebKit -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework OpenAL -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework AudioToolbox -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework QuartzCore -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework Foundation -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework GameController -F /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.0.sdk/System/Library/Frameworks -framework Metal /usr/lib/libz.dylib /usr/lib/libiconv.dylib -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/MyGame.app-Simulated.xcent -Xlinker -no_adhoc_codesign -Xlinker -dependency_info -Xlinker /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/Objects-normal/i386/MyGame_dependency_info.dat -o /Users/karl/tmp/cocos-example/MyGame/ios-build/MyGame.build/Debug-iphonesimulator/MyGame.build/Objects-normal/i386/Binary/MyGame
clang: error: no such file or directory: '/usr/lib/libz.dylib'
clang: error: no such file or directory: '/usr/lib/libiconv.dylib'
Command Ld failed with a nonzero exit code
kstenerud commented 2 years ago

Update: Android doesn't work either:

$ cocos run --proj-dir .. -p android
Building mode: debug
Using Android Studio project : /Users/karl/tmp/cocos-example/MyGame/..
gradle.properties not found!
slackmoehrle commented 2 years ago

I think we need to update the Readme.md.

Please use CMake now. https://docs.cocos2d-x.org/cocos2d-x/v4/en/installation/

kstenerud commented 2 years ago

The linked documentation has the same instructions:

"Once everything above works, you can start a new project! To do this, read our document on the Cocos Command-line tool."

On that page, the instructions are (for ios):

cocos new MyGame -p com.MyCompany.MyGame -l cpp -d ~/MyCompany
cocos compile -s ~/MyCompany/MyGame -p ios -m release -o ~/MyCompany/MyGame/bin

The cocos tool calls cmake under the hood, but the compilation fails:

$ cocos compile -s ~/tmp/MyGame -p ios -m release -o ~/tmp/MyGame/bin
Building mode: release
running: 'cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator'

...

clang: error: no such file or directory: '/usr/lib/libz.dylib'
clang: error: no such file or directory: '/usr/lib/libiconv.dylib'
Command Ld failed with a nonzero exit code

Workarounds are given on SO: https://stackoverflow.com/questions/64842199/cocos2d-x-4-0-app-build-no-longer-works-after-upgrade-to-macos-big-sur-11-01-er

The 4.x cocos tool as it stands now is producing a broken ios project.

kstenerud commented 2 years ago

If I open the project in xcode, it still fails in the linking phase, and also there's no way to select a real device (it only allows me to select the simulator). This used to work fine in 3.x (I just tested it).

kstenerud commented 2 years ago

I've tried this:

cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos

It runs successfully, but doesn't produce an apk.

karlmac:bin karl$ cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos
-- PROJECT_NAME:MyGame
-- PROJECT_SOURCE_DIR:/Users/karl/tmp/MyGame
-- COCOS2DX_ROOT_PATH:/Users/karl/tmp/MyGame/cocos2d
-- CMAKE_MODULE_PATH:/Users/karl/tmp/MyGame/cocos2d/cmake/Modules/
-- PROJECT_BINARY_DIR:/Users/karl/tmp/MyGame/bin
-- ENGINE_BINARY_PATH:/Users/karl/tmp/MyGame/bin/engine
-- PYTHON_PATH:/usr/bin/python2
-- COCOS_COMMAND_PATH:/Users/karl/Devel/cocos2d-x-current/tools/cocos2d-console/bin/cocos
-- HOST_SYSTEM:Darwin
-- CMAKE_GENERATOR: Xcode
-- COCOS2DX_LUAJIT_ROOT:/Users/karl/Devel/cocos2d-x-current/tools/cocos2d-console/bin/../plugins/plugin_luacompile/bin
-- cocos_mark_code_files: cocos2d
-- cocos_mark_code_files: MyGame
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/karl/tmp/MyGame/bin
qoozta commented 2 years ago

I will suggest you to use cocos command to build the Xcode / Android project only, then build the app from Xcode / AS.

zhangleipku commented 1 year ago

Hi, @kstenerud

I have just encountered the same problem recently.

It seems it's caused by a change of macOS (since BigSur), and you should modify the setting of "Other Linkers Flags" like this :

libz.dylib => -lz libiconv.dylib => -liconv

Screen Shot 2022-09-15 at 17 57 53 Screen Shot 2022-09-15 at 17 58 02
haanhduclinh commented 1 year ago

Hi, @kstenerud

I have just encountered the same problem recently.

It seems it's caused by a change of macOS (since BigSur), and you should modify the setting of "Other Linkers Flags" like this :

libz.dylib => -lz libiconv.dylib => -liconv

Screen Shot 2022-09-15 at 17 57 53 Screen Shot 2022-09-15 at 17 58 02

thanks. it's working