{ "id": "165603", "key": "TIMOB-24358", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "17608", "name": "Release 6.1.0", "archived": false, "released": true, "releaseDate": "2017-05-26" }, { "id": "18928", "name": "Release 6.0.2", "archived": false, "released": true, "releaseDate": "2017-02-27" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2017-02-09T13:35:41.000+0000", "created": "2017-01-31T00:48:55.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "ios", "musicplayer" ], "versions": [], "issuelinks": [], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2017-02-10T01:23:15.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "The app crashes after music starts playing, either by hitting play button or by playing a song in Apple Music and opening the app. I does not work on 6.0.1GA, 6.0.2 and 6.1.0. I am also not getting much in terms of the log.\r\n\r\n{code:title=Bar.javascript|borderStyle=solid}\r\n//this is from kitchensink.\r\n\r\n\r\nvar win = $.win;\r\n\r\nvar player = null;\r\n\r\nvar info = Ti.UI.createLabel({\r\n text: '',\r\n height: 'auto',\r\n width: 'auto',\r\n top: 200\r\n});\r\nwin.add(info);\r\nvar title = Ti.UI.createLabel({\r\n text: '',\r\n height: 'auto',\r\n width: 'auto',\r\n top: 220\r\n});\r\nwin.add(title);\r\nvar timeBar = Ti.UI.createProgressBar({\r\n min: 0,\r\n value: 0,\r\n width: 200,\r\n height: 40,\r\n top: 240,\r\n color: '#888',\r\n style: Titanium.UI.iPhone.ProgressBarStyle.PLAIN\r\n});\r\nwin.add(timeBar);\r\n\r\nvar playback = null;\r\nvar barUpdate = function() {\r\n timeBar.value = player.currentPlaybackTime;\r\n Ti.API.log('Playback time: ' + player.currentPlaybackTime);\r\n};\r\n\r\ntry {\r\n player = Titanium.Media.systemMusicPlayer;\r\n\r\n if (player.playbackState == Titanium.Media.MUSIC_PLAYER_STATE_PLAYING) {\r\n info.text = player.nowPlaying.artist + ' : ' + player.nowPlaying.albumTitle;\r\n title.text = player.nowPlaying.title;\r\n timeBar.show();\r\n timeBar.max = player.nowPlaying.playbackDuration;\r\n timeBar.value = player.currentPlaybackTime;\r\n if (playback == null) {\r\n playback = setInterval(barUpdate, 500);\r\n }\r\n }\r\n\r\n player.addEventListener('stateChange', function() {\r\n if (player.playbackState == Titanium.Media.MUSIC_PLAYER_STATE_STOPPED) {\r\n title.text = '';\r\n info.text = '';\r\n timeBar.hide();\r\n timeBar.max = 0;\r\n timeBar.value = 0;\r\n clearInterval(playback);\r\n playback = null;\r\n }\r\n if (player.playbackState == Titanium.Media.MUSIC_PLAYER_STATE_PLAYING) {\r\n info.text = player.nowPlaying.artist + ' : ' + player.nowPlaying.albumTitle;\r\n title.text = player.nowPlaying.title;\r\n timeBar.show();\r\n timeBar.max = player.nowPlaying.playbackDuration;\r\n timeBar.value = player.currentPlaybackTime;\r\n if (playback == null) {\r\n playback = setInterval(barUpdate, 500);\r\n }\r\n }\r\n });\r\n player.addEventListener('playingChange', function() {\r\n if (player.playbackState == Titanium.Media.MUSIC_PLAYER_STATE_PLAYING) {\r\n info.text = player.nowPlaying.artist + ' : ' + player.nowPlaying.albumTitle;\r\n title.text = player.nowPlaying.title;\r\n timeBar.show();\r\n timeBar.max = player.nowPlaying.playbackDuration;\r\n timeBar.value = 0;\r\n if (playback == null) {\r\n playback = setInterval(barUpdate, 500);\r\n }\r\n }\r\n });\r\n player.addEventListener('volumeChange', function() {\r\n Ti.API.log('Volume change: ' + player.volume);\r\n });\r\n} catch (e) {\r\n // create alert\r\n Titanium.UI.createAlertDialog({\r\n title: 'Music Player',\r\n message: 'Please run this test on device: Inoperative on simulator'\r\n }).show();\r\n}\r\n\r\nvar b1 = Ti.UI.createButton({\r\n title: 'Play',\r\n width: 80,\r\n height: 40,\r\n left: 20,\r\n top: 20\r\n});\r\nb1.addEventListener('click', function() {\r\n player.play();\r\n});\r\nwin.add(b1);\r\n\r\nvar b2 = Ti.UI.createButton({\r\n title: 'Pause',\r\n width: 80,\r\n height: 40,\r\n top: 20\r\n});\r\nb2.addEventListener('click', function() {\r\n player.pause();\r\n});\r\nwin.add(b2);\r\n\r\nvar b3 = Ti.UI.createButton({\r\n title: 'Stop',\r\n width: 80,\r\n height: 40,\r\n top: 20,\r\n right: 20\r\n});\r\nb3.addEventListener('click', function() {\r\n player.stop();\r\n});\r\nwin.add(b3);\r\n\r\nvar b4 = Ti.UI.createButton({\r\n title: 'Seek >>',\r\n width: 80,\r\n height: 40,\r\n top: 80,\r\n left: 20\r\n});\r\nb4.addEventListener('click', function() {\r\n player.seekForward();\r\n});\r\nwin.add(b4);\r\n\r\nvar b5 = Ti.UI.createButton({\r\n title: 'Stop seek',\r\n width: 80,\r\n height: 40,\r\n top: 80\r\n});\r\nb5.addEventListener('click', function() {\r\n player.stopSeeking();\r\n});\r\nwin.add(b5);\r\n\r\nvar b6 = Ti.UI.createButton({\r\n title: 'Seek <<',\r\n width: 80,\r\n height: 40,\r\n top: 80,\r\n right: 20\r\n});\r\nb6.addEventListener('click', function() {\r\n player.seekBackward();\r\n});\r\nwin.add(b6);\r\n\r\nvar b7 = Ti.UI.createButton({\r\n title: 'Skip >>',\r\n width: 80,\r\n height: 40,\r\n top: 140,\r\n left: 20\r\n});\r\nb7.addEventListener('click', function() {\r\n player.skipToNext();\r\n});\r\nwin.add(b7);\r\n\r\nvar b8 = Ti.UI.createButton({\r\n title: 'Skip |>',\r\n width: 80,\r\n height: 40,\r\n top: 140\r\n});\r\nb8.addEventListener('click', function() {\r\n player.skipToBeginning();\r\n});\r\nwin.add(b8);\r\n\r\nvar b9 = Ti.UI.createButton({\r\n title: 'Skip <<',\r\n width: 80,\r\n height: 40,\r\n top: 140,\r\n right: 20\r\n});\r\nb9.addEventListener('click', function() {\r\n player.skipToPrevious();\r\n});\r\nwin.add(b9);\r\n\r\n//\r\n// MODAL SETTINGS BIT...\r\n//\t\r\nvar settingsWindow = Ti.UI.createWindow({\r\n backgroundColor: '#fff',\r\n title: 'Picker settings'\r\n});\r\n\r\nvar settings = {\r\n success: function(picked) {\r\n if (!settings.autohide) {\r\n Ti.API.log(\"You didn't autohide me!\");\r\n Ti.Media.hideMusicLibrary();\r\n }\r\n player.setQueue(picked);\r\n },\r\n error: function(error) {\r\n // create alert\r\n var a = Titanium.UI.createAlertDialog({\r\n title: 'Music Picker'\r\n });\r\n\r\n // set message\r\n if (error.code == Titanium.Media.NO_MUSIC_PLAYER) {\r\n a.setMessage('Please run this test on device');\r\n } else {\r\n a.setMessage('Unexpected error: ' + error.code);\r\n }\r\n\r\n // show alert\r\n a.show();\r\n },\r\n mediaTypes: [Ti.Media.MUSIC_MEDIA_TYPE_ALL],\r\n autohide: true\r\n};\r\n\r\nvar modify = function(e) {\r\n Ti.API.log('Changing setting ' + e.source.toggle + ': ' + e.source.value);\r\n settings[e.source.toggle] = e.source.value;\r\n};\r\n\r\nvar v1 = Ti.UI.createView({\r\n top: 10,\r\n left: 10,\r\n width: 250,\r\n height: 30\r\n});\r\nvar l1 = Ti.UI.createLabel({\r\n top: 0,\r\n left: 0,\r\n text: 'Autohide: '\r\n});\r\nvar s1 = Ti.UI.createSwitch({\r\n value: true,\r\n right: 10,\r\n top: 0,\r\n toggle: 'autohide'\r\n});\r\ns1.addEventListener('change', modify);\r\nv1.add(l1);\r\nv1.add(s1);\r\nsettingsWindow.add(v1);\r\n\r\nvar v2 = Ti.UI.createView({\r\n top: 45,\r\n left: 10,\r\n width: 250,\r\n height: 30\r\n});\r\nvar l2 = Ti.UI.createLabel({\r\n top: 0,\r\n left: 0,\r\n text: 'Animated: '\r\n});\r\nvar s2 = Ti.UI.createSwitch({\r\n value: true,\r\n top: 0,\r\n right: 10,\r\n toggle: 'animated'\r\n});\r\ns2.addEventListener('change', modify);\r\nv2.add(l2);\r\nv2.add(s2);\r\nsettingsWindow.add(v2);\r\n\r\nvar v3 = Ti.UI.createView({\r\n top: 80,\r\n left: 10,\r\n width: 250,\r\n height: 30\r\n});\r\nvar l3 = Ti.UI.createLabel({\r\n top: 0,\r\n left: 0,\r\n text: 'Multiple: '\r\n});\r\nvar s3 = Ti.UI.createSwitch({\r\n value: false,\r\n top: 0,\r\n right: 10,\r\n toggle: 'allowMultipleSelections'\r\n});\r\ns3.addEventListener('change', modify);\r\nv3.add(l3);\r\nv3.add(s3);\r\nsettingsWindow.add(v3);\r\n\r\nvar switches = [];\r\nfor (var i = 0; i < 5; i++) {\r\n var baseTop = 115;\r\n var v = Ti.UI.createView({\r\n top: baseTop + i * 35,\r\n left: 10,\r\n width: 250,\r\n height: 30\r\n });\r\n\r\n var text;\r\n var type;\r\n switch (i) {\r\n case 0:\r\n text = 'Music:';\r\n type = Ti.Media.MUSIC_MEDIA_TYPE_MUSIC;\r\n break;\r\n case 1:\r\n text = 'Podcasts:';\r\n type = Ti.Media.MUSIC_MEDIA_TYPE_PODCAST;\r\n break;\r\n case 2:\r\n text = 'Audiobooks:';\r\n type = Ti.Media.MUSIC_MEDIA_TYPE_AUDIOBOOK;\r\n break;\r\n case 3:\r\n text = 'Any audio:';\r\n type = Ti.Media.MUSIC_MEDIA_TYPE_ANY_AUDIO;\r\n break;\r\n case 4:\r\n text = 'All:';\r\n type = Ti.Media.MUSIC_MEDIA_TYPE_ALL;\r\n break;\r\n }\r\n\r\n var l = Ti.UI.createLabel({\r\n top: 0,\r\n left: 0,\r\n text: text\r\n });\r\n var s = Ti.UI.createSwitch({\r\n value: (i == 4),\r\n top: 0,\r\n right: 10,\r\n index: i,\r\n type: type\r\n });\r\n if (i == 4) {\r\n s.value = true;\r\n }\r\n\r\n s.addEventListener('change', function(e) {\r\n var type = e.source.type;\r\n\r\n Ti.API.log('Setting media type: ' + type + ' to ' + e.source.value);\r\n\r\n var index = settings.mediaTypes.indexOf(type);\r\n if (e.source.value) {\r\n if (index == -1) {\r\n settings.mediaTypes.push(type);\r\n }\r\n } else {\r\n if (index != -1) {\r\n settings.mediaTypes.splice(index, 1);\r\n }\r\n }\r\n });\r\n switches.push(s);\r\n\r\n v.add(l);\r\n v.add(s);\r\n settingsWindow.add(v);\r\n}\r\n\r\nvar back = Ti.UI.createButton({\r\n title: 'Close',\r\n style: Titanium.UI.iPhone.SystemButtonStyle.PLAIN\r\n});\r\nback.addEventListener('click', function() {\r\n settingsWindow.close();\r\n});\r\nsettingsWindow.setLeftNavButton(back);\r\n//\r\n/// ... END MODAL SETTINGS BIT\r\n//\r\n\r\nvar b10 = Ti.UI.createButton({\r\n title: 'Picker settings',\r\n width: 120,\r\n height: 40,\r\n bottom: 20,\r\n left: 20\r\n});\r\nb10.addEventListener('click', function() {\r\n settingsWindow.open({\r\n modal: true\r\n });\r\n});\r\nwin.add(b10);\r\n\r\nvar b11 = Ti.UI.createButton({\r\n title: 'Display library',\r\n width: 120,\r\n height: 40,\r\n bottom: 20,\r\n right: 20\r\n});\r\nb11.addEventListener('click', function() {\r\n Ti.Media.openMusicLibrary(settings);\r\n});\r\nwin.add(b11);\r\n\r\nwin.addEventListener('close', function() {\r\n if (playback != null) {\r\n clearInterval(playback);\r\n }\r\n});\r\n\r\nwin.open();\r\n \r\n$.win.open();\r\n{code}", "attachment": [ { "id": "61344", "filename": "Full-Log.rtf", "author": { "name": "mikezal1", "key": "mikezal1", "displayName": "mikezal1", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-01-31T00:40:45.000+0000", "size": 49031, "mimeType": "text/rtf" } ], "flagged": false, "summary": "iOS: Ti.Media.systemMusicPlayer crashes with Apple Music", "creator": { "name": "mikezal1", "key": "mikezal1", "displayName": "mikezal1", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "mikezal1", "key": "mikezal1", "displayName": "mikezal1", "active": true, "timeZone": "America/Los_Angeles" }, "environment": "Operating System\r\n Name = Mac OS X\r\n Version = 10.12.3\r\n Architecture = 64bit\r\n # CPUs = 8\r\n Memory = 17179869184\r\nNode.js\r\n Node.js Version = 4.6.1\r\n npm Version = 2.15.9\r\nTitanium CLI\r\n CLI Version = 5.0.11\r\nTitanium SDK\r\n SDK Version = 6.0.2.v20170130045621\r\n SDK Path = /Users/Michael/Library/Application Support/Titanium/mobilesdk/osx/6.0.2.v20170130045621\r\n Target Platform = iphone\r\n\r\niPhone 7 , 10.2.1", "comment": { "comments": [ { "id": "405817", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thanks for following up our discussion on Slack! Seeing the crash and example code now, rather looks like you didn't include the iOS 10+ privacy keys for Apple Music inside your tiapp.xml {{}} plist section:\r\n\r\n{code:xml}\r\nNSAppleMusicUsageDescription\r\nCan We access your Music Library?\r\n{code}\r\nSee the [Release Notes|http://www.appcelerator.com/blog/2016/09/ga-release-for-titanium-sdk-5-5-0-appcelerator-cli-5-5-0-appcelerator-studio-4-7-1/] and \"Migrate Your Apps to iOS 10\" for details. I will leave this ticket open until then.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-31T08:57:06.000+0000", "updated": "2017-01-31T08:57:06.000+0000" }, { "id": "405818", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Forget the above comment, I can reproduce it and have a fix available for 6.0.2. Sorry for the trouble!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-31T09:26:29.000+0000", "updated": "2017-01-31T09:26:29.000+0000" }, { "id": "405819", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (master): https://github.com/appcelerator/titanium_mobile/pull/8806\r\nPR (6_0_X): https://github.com/appcelerator/titanium_mobile/pull/8807", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-31T09:35:56.000+0000", "updated": "2017-01-31T09:35:56.000+0000" }, { "id": "406793", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Verified FR passed and changes included in SDK 6.0.2.v20170209053146.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-02-10T01:23:15.000+0000", "updated": "2017-02-10T01:23:15.000+0000" } ], "maxResults": 4, "total": 4, "startAt": 0 } } }