Giter Club home page Giter Club logo

robovm-eclipse's Introduction

RoboVM

Please see robovm.com for more information.

robovm-eclipse's People

Contributors

badlogic avatar blueriverinteractive avatar ntherning avatar zonski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

robovm-eclipse's Issues

Process isn't closed if simulator deploy fails

When deploying to the simulator, ios-sim sometimes fails with:

12/25/14 12:11:48 PM: [ERROR] Session could not be started: Error Domain=LaunchServicesError Code=0 "Unable to run app in Simulator" UserInfo=0x7fc0d2d0fa50 {Error=PackagePatchFailed, ErrorDescription=Could not hardlink copy /Users/badlogic/Library/Developer/CoreSimulator/Devices/4EDDCB4C-D5BB-480A-B0BD-92ECD85CE767/data/Containers/Bundle/Application/B5086F76-A9F6-43AB-8D56-FFC37DCEC308/IOSLauncher.app to /Users/badlogic/Library/Developer/CoreSimulator/Devices/4EDDCB4C-D5BB-480A-B0BD-92ECD85CE767/data/Library/Caches/com.apple.mobile.installd.staging/temp.PDbQKB/extracted/Payload/IOSLauncher.app with manifest /Users/badlogic/Library/Developer/CoreSimulator/Devices/4EDDCB4C-D5BB-480A-B0BD-92ECD85CE767/data/Library/Caches/com.apple.mobile.installd.staging/temp.PDbQKB/extracted/com.apple.deltainstallcommands.com.mygdx.game.IOSLauncher, NSLocalizedFailureReason=An error was encountered while running (Domain = LaunchServicesError, Code = 0), NSUnderlyingError=0x7fc0d4b0f8d0 "The operation couldn’t be completed. (LaunchServicesError error 0.)", NSLocalizedDescription=Unable to run app in Simulator}

This will let the process hang, Eclipse' will keep it around, showing it in the Debug view.

http://sht.tl/k8T6sS

Trying to get rid of the process via the stop button does not work.

Lauching/Creating a launch config fails in IOSSimulatorLaunchShortcut

Got the following simulators installed:

(lldb) platform select remote-ios
  Platform: remote-ios
 Connected: no
  SDK Path: "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0"
 SDK Roots: [ 0] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2"
 SDK Roots: [ 1] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3"
 SDK Roots: [ 2] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.0"
 SDK Roots: [ 3] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.1"
 SDK Roots: [ 4] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/6.0"
 SDK Roots: [ 5] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/6.1"
 SDK Roots: [ 6] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0"
 SDK Roots: [ 7] "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0.3 (11B508)"

Crash:

java.lang.NullPointerException
    at org.robovm.eclipse.internal.IOSSimulatorLaunchShortcut.customizeConfiguration(IOSSimulatorLaunchShortcut.java:45)
    at org.robovm.eclipse.internal.AbstractProjectLaunchShortcut.launch(AbstractProjectLaunchShortcut.java:129)
    at org.robovm.eclipse.internal.AbstractProjectLaunchShortcut.launch(AbstractProjectLaunchShortcut.java:66)
    at org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension.launch(LaunchShortcutExtension.java:431)
    at org.eclipse.debug.internal.ui.actions.LaunchShortcutAction.run(LaunchShortcutAction.java:74)
    at org.eclipse.debug.internal.ui.actions.LaunchShortcutAction.runWithEvent(LaunchShortcutAction.java:123)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4188)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1279)
    at org.eclipse.jface.action.ActionContributionItem$9.handleEvent(ActionContributionItem.java:1293)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4188)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1279)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4031)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3658)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465)

Simulator freezing when launching an app

I'm getting a weird issue when launching the simulator from Eclipse. I banged my head on the wall until I found some conditions where it does not happen all the times, so I can make progress on my app.
Basically, the simulator freezes right after I launch it from Eclipse. The initial page is displayed, but then clicks are not handled, nor you can scroll if it is a table view. I reproduced it easily with the simple UICatalog from robovm-samples.
I found out that:

  • It doesn't happen systematically
  • It appears way more often when 'Debug' is chosen in Eclipse instead of 'Run'
  • Seems that it appears also more often when the device is scaled to 50%, although I have no proof for this
  • When frozen, you can go to the simulator home page, kill the app, relaunch it from the icon that was installed and it works...
    It is like a race condition. The slower the machine is, the more often it seems to happen. In particular when this is executed within a VM, which is slower by definition.

Here how I can reproduce it almost systematically on my own machines. I don't know why adding a class makes it worse.

  • Import the UICatalog to your Eclipse workspace
  • Launch it in the iPhone simulator, in debug: works
  • Copy/paste ButtonViewController in the same package and name the copy ButtonViewController2
  • Open MainViewController and create an instance of this new button view after the existing one
    // for showing various UIButtons:
    ButtonsViewController buttonsViewController = new ButtonsViewController();
    ButtonsViewController2 buttonsViewController2 = new ButtonsViewController2();
  • Stop the previous process and launch UICatalog again
    -> the main UI view displays the list, but it seems frozen. It doesn't handle clicks, nor it enables scrolling. As soon as you remove the creation of new ButtonViewController2 (comment it out) then it works again. The view doesn't have to be even added to the menuList collection.

Let me know if you want more details. I can send whatever you want/need to better understand the issue. I can also offer a remote session in case you need it to investigate the issue.

RoboVM incremental class builder doesn't build classes in the correct order

The purpose of the RoboVMClassBuilder is to incrementally build classes as they change. When many classes are rebuilt (e.g. after a clean) we often see that classes are built in incorrect order (not in order of dependency) so that some classes still have to be recompiled on the next launch even if not changed.

The simplest way to fix this is to set the file modification timestamp of all object files to the same timestamp ('now') right after the incremental build is finished.

Error on creating new project RoboVM project

Error on creating new project RoboVM project on Eclipse Platform

Version: 4.3.1.v20130911-1000
Build id: M20130911-1000

The selected wizard could not be started.
Plug-in org.robovm.eclipse.ui was unable to load class org.robovm.eclipse.internal.NewCocoaTouchProjectWizard.
An error occurred while automatically activating bundle org.robovm.eclipse.ui (824).

image

Bundle robovm-dist with the Eclipse plugin

With this change the user only needs to install the Eclipse plugin and Xcode to get going. No need to download the RoboVM distribution and put it in /opt. (LLVM is now embedded in the compiler so it doesn't have to be downloaded either)

IBIntegrator integration for every Eclipse project

We need to start up the IBIntegrator for every RoboVM Eclipse project and make sure that new classpath folders and resource folders get registered and processed.

IBIntegrator integrator = new IBIntegrator();
integrator.start(); // Start the daemon.

integrator.addSourceFolders(...); // Add new source/classpath folders.
integrator.addResourceFolders(...); // Add new resource folders (specified in the robovm.xml).

Don't use reproducible version qualifiers

The nightlies we build depend on SNAPSHOT versions of the robovm-compiler and this doesn't work with Tycho's reproducible version qualifiers. It doesn't take changed SNAPSHOT dependencies into account. Just use the default timestamps based on build time. When making a release we change the version to one without SNAPSHOT and tag so at least release builds will be reproducible.

[IB] IBIntegrator integration in Eclipse

Every project should have it's own IBIntegrator. The .ib folder will be generated in the project root. All resource folders specified in the robovm.xml should be watched by IBIntegrator, as well as all folders with compiled Java class files.

Simulator launching failure

The simulator fails to correctly display an app when it relaunched after been modified.
Here is how to reproduce:

  • Add the UICatalog demo to the workspace
  • Launch the app in debug from the context menu
    it displays the main view, so it works. Don't shutdown the simulator
  • Modify one file in the project (ex: add a dummy member to MyTableView)
  • Launch again with the same debug option and the simulator will then show a black screen

Workarounds:

  • Go to the home screen in the simulator and click back on the app icon
  • Terminate the app in the eclipse debug window
  • Reset the simulator settings

Creating a new console project can't be completed via wizard

Pressing the Finish button does nothing. I guess the templater needs to be disabled for the console project wizard.

java.lang.IllegalArgumentException: No main class specified
    at org.robovm.templater.Templater.buildProject(Templater.java:184)
    at org.robovm.eclipse.internal.NewProjectWizard.performFinish(NewProjectWizard.java:117)
    at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:853)
    at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:438)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:619)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4188)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1279)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4031)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3658)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)
    at org.eclipse.jface.window.Window.open(Window.java:808)
    at org.eclipse.ui.internal.actions.NewWizardShortcutAction.run(NewWizardShortcutAction.java:136)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:519)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:420)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4188)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1279)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4031)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3658)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465)

Running JUnit tests on simulator fails the second time

First launch works as expected. Second launch fails with

12/2/14 4:36:54 PM: [ERROR] Session could not be started: Error Domain=LaunchServicesError Code=0 "Unable to run app in Simulator" UserInfo=0x7fd552d199f0 {Error=PackagePatchFailed, ErrorDescription=Could not hardlink copy /Users/niklas/Library/Developer/CoreSimulator/Devices/25321885-9CE5-4231-86DD-AAD81862BCF8/data/Containers/Bundle/Application/B4BCE8D6-E0F2-46CE-B6CA-E2F5209AEEE3/ContractR.app to /Users/niklas/Library/Developer/CoreSimulator/Devices/25321885-9CE5-4231-86DD-AAD81862BCF8/data/Library/Caches/com.apple.mobile.installd.staging/temp.PdZ1M9/extracted/Payload/ContractR.app with manifest /Users/niklas/Library/Developer/CoreSimulator/Devices/25321885-9CE5-4231-86DD-AAD81862BCF8/data/Library/Caches/com.apple.mobile.installd.staging/temp.PdZ1M9/extracted/com.apple.deltainstallcommands.org.robovm.samples.contractrTest, NSLocalizedFailureReason=An error was encountered while running (Domain = LaunchServicesError, Code = 0), NSUnderlyingError=0x7fd552f3e5d0 "The operation couldn’t be completed. (LaunchServicesError error 0.)", NSLocalizedDescription=Unable to run app in Simulator}

The work around is to delete the test app from the simulator before relaunching.

M2Eclipse connector

The connector should look for a reference to the robovm maven plugin in the pom (and parents too?). If found it should add the org.robovm.eclipse.RoboVMNature and the org.robovm.eclipse.RoboVMClassBuilder to the Eclipse project and set up a classpath with the org.robovm.eclipse.ROBOVM_CONTAINER and (if it's an iOS project) the org.robovm.eclipse.ROBOVM_COCOA_TOUCH_CONTAINER.

Build fails if , in Launchfilename

Hi,

just a very minor one :)

I renamed my launchfile to

FindMeAMotif Simulator (3,5-inch).launch

after this the console has this error:
18.04.14 03:05:22: [ INFO] Building executable
18.04.14 03:05:26: [ INFO] Linking 5995 classes
18.04.14 03:05:47: [DEBUG] Building executable /Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/build/FindMeAMotif/FindMeAMotif Simulator (3,5-inch)/ios/x86/Find Me A Motif
18.04.14 03:05:47: [DEBUG] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o "/Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/build/FindMeAMotif/FindMeAMotif Simulator (3,5-inch)/ios/x86/Find Me A Motif" -g -arch i386 "-Wl,-filelist,/Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/build/FindMeAMotif/FindMeAMotif Simulator (3,5-inch)/ios/x86/objects" -L /Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/robovm-0.0.11/lib/vm/ios/x86 -ObjC -exported_symbols_list "/Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/build/FindMeAMotif/FindMeAMotif Simulator (3,5-inch)/ios/x86/exported_symbols" -Wl,-no_implicit_dylibs -Wl,-dead_strip -mios-simulator-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk -lrobovm-bc -force_load /Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/robovm-0.0.11/lib/vm/ios/x86/librobovm-rt.a -lrobovm-debug -lrobovm-core -lgc -lpthread -ldl -lm -liconv -lsqlite3 -framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore -framework CoreGraphics -framework CoreText -framework ImageIO -framework MobileCoreServices -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libjavafx_font.a -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libprism_common.a -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libprism_sw.a -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libprism_es2.a -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libglass.a -force_load /Users/XXX/Dropbox/git/FindMeAMotif/FindMeAMotif/jfx78/libjavafx_iio.a
18.04.14 03:05:47: [ERROR] ld: -filelist file '/Users/XXX/Documents/workspace/.metadata/.plugins/org.robovm.eclipse.ui/build/FindMeAMotif/FindMeAMotif Simulator (3' could not be opened, errno=2 (No such file or directory)
18.04.14 03:05:47: [ERROR]
18.04.14 03:05:47: [ERROR] clang: error: linker command failed with exit code 1 (use -v to see invocation)
18.04.14 03:05:47: [ERROR] Build failed

I noticed this report:
http://www.cocoabuilder.com/archive/xcode/264712-xcode-link-error-what-does-this-mean.html

so maybe it is xcode-related, but I don't know which parameters are generated and which are given to xcode. Maybe the comma can be replaced before calling xCode.

Thanks :)

Consider making SDK to build against and other configurable from within Eclipse

Currently the Eclipse plugin always builds against the latest available SDK. We could expose this in either the project wide settings or launch configuration. There may be other options that we could expose that way.

Alternatively we could keep it all in robovm.xml similar to Android (though that also exposes some things through dialogs).

One consideration with exposing build options is keeping the Eclipse side and robovm.xml in synch.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.