DaVikingCode / Citrus-Engine

Modern AS3 Game Engine
http://citrusengine.com/
Other
550 stars 231 forks source link

App crash on iOS after deactivate/activate #181

Closed varadig closed 10 years ago

varadig commented 10 years ago

I tried your solution in this way:

/**

import flash.events.Event;

import states.Test;

[SWF(width="852", height="480", frameRate="60")]

public class Main extends StarlingCitrusEngine {

public function Main():void {
    _baseWidth = 852;
    _baseHeight = 480;
    _viewportMode = ViewportMode.FULLSCREEN;
}

override protected function handleAddedToStage(e:Event):void {
    super.handleAddedToStage(e);
    sound.addSound("bgm", {sound: new MainMenuMusic()}); //MainMenuMusic is flash SoundObject
    setUpStarling(true);
}

override protected function handleStageDeactivated(e:Event):void {
    super.handleStageDeactivated(e);
    trace(_playing, sound.soundIsPlaying("bgm"));
}

override protected function handleStageActivated(e:Event):void {
    super.handleStageActivated(e);
    trace(_playing, sound.soundIsPlaying("bgm"));
}

override public function handleStarlingReady():void {
    state = new Test();
}

} }

package states { import citrus.core.starling.StarlingState;

public class Test extends StarlingState {

public function Test()
{

}

override public function initialize():void
{
    super.initialize();

    trace("Test state init.");
    _ce.sound.playSound("bgm");
}

}

}

and the result:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -d32 -Dapplication.home=/Volumes/GotoDesign/Gabi/Develop/SDK/flex/AIR40 -Xmx384m -Dsun.io.useCanonCaches=false -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Duser.language=en -Duser.region=en -Xmx512m -classpath /Volumes/GotoDesign/Gabi/Develop/SDK/flex/AIR40/lib/legacy/fdb.jar flex.tools.debugger.cli.DebugCLI -p 7936 Adobe fdb (Flash Player Debugger) [build development] Copyright (c) 2004-2007 Adobe, Inc. All rights reserved. Trying to connect to Player Player connected; session starting. [trace] [CitrusSoundInstance] maximum number of concurrent SoundChannels for this instance of CitrusEngine : 32 [trace] [StarlingCitrusEngine] Context3DProfile - testing : baselineExtended,baseline,baselineConstrained with delay:100ms ... [trace] [StarlingCitrusEngine] Context3DProfile - baselineExtended is supported! setting up starling... [trace] [Starling] Initialization complete. [trace] [Starling] Display Driver: OpenGL (Baseline Extended) [trace] Test state init. [trace] false false Player session terminated

So started the application and the Test state initialized fine, and the music is playing ok. After press home button on iPad "[trace] false false" Try to activate the app again "Player session terminated".

alamboley commented 10 years ago

Hey, which version of the engine are you using? I can't remember if the CitrusSoundInstance trace information is included in the latest SWC or not (I'm using the source code instead of the SWC).

alamboley commented 10 years ago

Also please be sure that in your *-app.xml you don't have UIApplicationExitsOnSuspend key to true!

http://forums.adobe.com/thread/870733

varadig commented 10 years ago

Hi there, I use the latest (3.1.8) swc and the UIApplicationExitsOnSuspend is not set to true. If I dont use any of sound, the deactivate/avtivate is works fine.

alamboley commented 10 years ago

Could you try using the source code instead of the swc? I'm working on an app with music and don't have the problem at all. We may already fix it.

varadig commented 10 years ago

Ok tomorrow I will try to build with the source code.

varadig commented 10 years ago

"Could you try using the source code instead of the swc? I'm working on an app with music and don't have the problem at all."

Are you working on iApp?

alamboley commented 10 years ago

If by iApp you mean iOS applications, yes ;)

varadig commented 10 years ago

Yes I meant iOS app :)

varadig commented 10 years ago

Hi, I tried again with the sources and the same things happened.

I also tried with Embeding: this.sound.addSound("sound.for.check", {sound: new SND()});

and Loading: this.sound.addSound("sound.for.check", {sound: "Game3Music.mp3"});

And of course tried without any sounds and in this case its worked :(

package { import citrus.core.starling.StarlingCitrusEngine;

import states.SoundState;

public class Main extends StarlingCitrusEngine { [Embed(source="Game3Music.mp3")] private var SND:Class;

public function Main()
{
    super();
    this.setUpStarling(true);
}

override public function handleStarlingReady():void
{

    //      Embedded
    //      this.sound.addSound("sound.for.check", {sound: new SND()});

    //      Loaded
    this.sound.addSound("sound.for.check", {sound: "Game3Music.mp3"});
    this.state = new SoundState();
}

} }

///STATE

package states { import citrus.core.IState; import citrus.core.starling.StarlingState;

public class SoundState extends StarlingState implements IState { public function SoundState() { super();

}

override public function initialize():void
{
    super.initialize();
    _ce.sound.playSound("sound.for.check");
}

} }

And finally I tried with flash.sound.Sound, with no luck.

varadig commented 10 years ago

Ohh and i have unjailbreaked iPad2, with iOS 7.0.4

alamboley commented 10 years ago

Hey, I tested, no problem on my side. Latest version of everything.

package {

    import citrus.core.starling.StarlingCitrusEngine;

    /**
     * @author Aymeric
     */
    public class Main extends StarlingCitrusEngine {

        public function Main() {

        }

        override public function initialize():void {
            super.initialize();

            setUpStarling(true);
        }

        override public function handleStarlingReady():void {
            super.handleStarlingReady();

            sound.addSound("sound.for.check", {sound:"sounds/song.mp3"});

            state = new SoundState();
        }

    }
}

package {

    import citrus.core.starling.StarlingState;

    /**
     * @author Aymeric
     */
    public class SoundState extends StarlingState {

        public function SoundState() {
            super();
        }

        override public function initialize():void {
            super.initialize();

            _ce.sound.playSound("sound.for.check");
        }

    }
}
alamboley commented 10 years ago

I can press the home button and go back on the app, the debugger is still connected (using FDT). My app.xml:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/3.9">
  <!-- Adobe AIR Application Descriptor File Template.

    Specifies parameters for identifying, installing, and launching AIR applications.

    xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.5
            The last segment of the namespace specifies the version 
            of the AIR runtime required for this application to run.

    minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
            the application. Optional.
-->
  <!-- A universally unique application identifier. Must be unique across all AIR applications.
    Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
  <id>CitrusEngine</id>
  <!-- Used as the filename for the application. Required. -->
  <filename>CitrusEngineAIR</filename>
  <!-- The name that is displayed in the AIR application installer. 
    May have multiple values for each language. See samples or xsd schema file. Optional. -->
  <name>Citrus Engine</name>
  <!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade. 
    Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
    An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 . -->
  <versionNumber>1.0</versionNumber>
  <!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -->
  <!-- <versionLabel></versionLabel> -->
  <!-- Description, displayed in the AIR application installer.
    May have multiple values for each language. See samples or xsd schema file. Optional. -->
  <!-- <description></description> -->
  <!-- Copyright information. Optional -->
  <!-- <copyright></copyright> -->
  <!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
  <!-- <publisherID></publisherID> -->
  <!-- Settings for the application's initial window. Required. -->
  <initialWindow>
    <!-- The main SWF or HTML file of the application. Required. -->
    <!-- Note: In Flash Builder, the SWF reference is set automatically. -->
    <content>Citrus-Engine-AIR.swf</content>
    <!-- The title of the main window. Optional. -->
    <!-- <title></title> -->
    <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
    <!-- <systemChrome></systemChrome> -->
    <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
    <!-- <transparent></transparent> -->
    <!-- Whether the window is initially visible. Optional. Default false. -->
    <!-- <visible></visible> -->
    <!-- Whether the user can minimize the window. Optional. Default true. -->
    <!-- <minimizable></minimizable> -->
    <!-- Whether the user can maximize the window. Optional. Default true. -->
    <!-- <maximizable></maximizable> -->
    <!-- Whether the user can resize the window. Optional. Default true. -->
    <!-- <resizable></resizable> -->
    <!-- The window's initial width in pixels. Optional. -->
    <!-- <width></width> -->
    <!-- The window's initial height in pixels. Optional. -->
    <!-- <height></height> -->
    <!-- The window's initial x position. Optional. -->
    <!-- <x></x> -->
    <!-- The window's initial y position. Optional. -->
    <!-- <y></y> -->
    <!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
    <!-- <minSize></minSize> -->
    <!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
    <!-- <maxSize></maxSize> -->
    <!-- The aspect ratio of the app ("portrait" or "landscape" or "any"). Optional. Mobile only. Default is the natural orientation of the device -->
    <!-- <aspectRatio></aspectRatio> -->
    <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
    <!-- <autoOrients></autoOrients> -->
    <!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
    <!-- <fullScreen></fullScreen> -->
    <!-- The render mode for the app (either auto, cpu, gpu, or direct). Optional. Default auto -->
    <!-- <renderMode></renderMode> -->
    <!-- Whether the default direct mode rendering context allocates storage for depth and stencil buffers.  Optional.  Default false. -->
    <!-- <depthAndStencil></depthAndStencil> -->
    <!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
    <!-- <softKeyboardBehavior></softKeyboardBehavior> -->
    <aspectRatio>landscape</aspectRatio>
    <fullScreen>true</fullScreen>
    <autoOrients>false</autoOrients>
    <visible>true</visible>
    <renderMode>direct</renderMode>
  </initialWindow>
  <!-- We recommend omitting the supportedProfiles element, -->
  <!-- which in turn permits your application to be deployed to all -->
  <!-- devices supported by AIR. If you wish to restrict deployment -->
  <!-- (i.e., to only mobile devices) then add this element and list -->
  <!-- only the profiles which your application does support. -->
  <!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
  <!-- Languages supported by application -->
  <!-- Only these languages can be specified -->
  <!-- <supportedLanguages>en de cs es fr it ja ko nl pl pt ru sv tr zh</supportedLanguages> -->
  <!-- The subpath of the standard default installation location to use. Optional. -->
  <!-- <installFolder></installFolder> -->
  <!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
  <!-- <programMenuFolder></programMenuFolder> -->
  <!-- The icon the system uses for the application. For at least one resolution,
    specify the path to a PNG file included in the AIR package. Optional. -->
  <!-- <icon>
        <image16x16></image16x16>
        <image29x29></image29x29>
        <image32x32></image32x32>
        <image36x36></image36x36>
        <image48x48></image48x48>
        <image50x50></image50x50>
        <image57x57></image57x57>
        <image58x58></image58x58>
        <image72x72></image72x72>
        <image100x100></image100x100>
        <image114x114></image114x114>
        <image128x128></image128x128>
        <image144x144></image144x144>
        <image512x512></image512x512>
        <image1024x1024></image1024x1024>
    </icon> -->
  <!-- Whether the application handles the update when a user double-clicks an update version
    of the AIR file (true), or the default AIR application installer handles the update (false).
    Optional. Default false. -->
  <!-- <customUpdateUI></customUpdateUI> -->
  <!-- Whether the application can be launched when the user clicks a link in a web browser.
    Optional. Default false. -->
  <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
  <!-- Listing of file types for which the application can register. Optional. -->
  <!-- <fileTypes> -->
  <!-- Defines one file type. Optional. -->
  <!-- <fileType> -->
  <!-- The name that the system displays for the registered file type. Required. -->
  <!-- <name></name> -->
  <!-- The extension to register. Required. -->
  <!-- <extension></extension> -->
  <!-- The description of the file type. Optional. -->
  <!-- <description></description> -->
  <!-- The MIME content type. -->
  <!-- <contentType></contentType> -->
  <!-- The icon to display for the file type. Optional. -->
  <!-- <icon>
                <image16x16></image16x16>
                <image32x32></image32x32>
                <image48x48></image48x48>
                <image128x128></image128x128>
            </icon> -->
  <!-- </fileType> -->
  <!-- </fileTypes> -->
  <!-- iOS specific capabilities -->
  <!-- <iPhone> -->
  <!-- A list of plist key/value pairs to be added to the application Info.plist -->
  <!-- <InfoAdditions>
            <![CDATA[
                <key>UIDeviceFamily</key>
                <array>
                    <string>1</string>
                    <string>2</string>
                </array>
                <key>UIStatusBarStyle</key>
                <string>UIStatusBarStyleBlackOpaque</string>
                <key>UIRequiresPersistentWiFi</key>
                <string>YES</string>
            ]]>
        </InfoAdditions> -->
  <!-- A list of plist key/value pairs to be added to the application Entitlements.plist -->
  <!-- <Entitlements>
            <![CDATA[
                <key>keychain-access-groups</key>
                <array>
                    <string></string>
                    <string></string>
                </array>
            ]]>
        </Entitlements> -->
  <!-- Display Resolution for the app (either "standard" or "high"). Optional. Default "standard" -->
  <!-- <requestedDisplayResolution></requestedDisplayResolution> -->
  <!-- </iPhone> -->
  <!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
  <!--<android> -->
  <!--  <manifestAdditions>
        <![CDATA[
            <manifest android:installLocation="auto">
                <uses-permission android:name="android.permission.INTERNET"/>
                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
                <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
                <uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
                <application android:enabled="true">
                    <activity android:excludeFromRecents="false">
                        <intent-filter>
                            <action android:name="android.intent.action.MAIN"/>
                            <category android:name="android.intent.category.LAUNCHER"/>
                        </intent-filter>
                    </activity>
                </application>
            </manifest>
        ]]>
        </manifestAdditions> -->
  <!-- Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
  <!-- <colorDepth></colorDepth> -->
  <!-- Indicates if the app contains video or not. Necessary for ordering of video planes with graphics plane, especially in Jellybean - if you app does video this must be set to true - valid values are true or false -->
  <!-- <containsVideo></containsVideo> -->
  <!-- </android> -->
  <!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
  <iPhone>
    <InfoAdditions><![CDATA[<key>UIDeviceFamily</key>
                            <array>
                                <string>1</string>
                                <string>2</string>
                            </array>
                            <key>UIStatusBarStyle</key>
                            <string>UIStatusBarStyleBlackOpaque</string>
                            <key>UIRequiresPersistentWiFi</key>
                            <string>YES</string>]]></InfoAdditions>
    <requestedDisplayResolution>high</requestedDisplayResolution>
  </iPhone>
  <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles>
</application>
varadig commented 10 years ago

Omg Omg..... I found what was the problem, and I have to say sorry.

I used AIR4.0 beta instead of the stable 3.9. If I changed to 3.9 SDK the problem is gone also with the source and with the SWC.

thanks for your help.

alamboley commented 10 years ago

Glad it is fixed, but that's sad to read that it comes from the future AIR SDK. Hope they will fix it ASAP.

gsynuh commented 10 years ago

This might be related? http://forums.adobe.com/message/5941774#5941774

(only happens when using audio)

Seems also that there are more issues with ios+air4 linked to audio