You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Track Player iOS构建停滞100%并崩溃问题求助

React Native Track Player iOS端崩溃:EXC_BAD_ACCESS 在setupPlayer时触发

问题描述

使用react-native-track-player开发音频播放应用,Android端运行完全正常,但iOS端构建到100%后崩溃,抛出错误:
com.facebook.react.runtime.JavaScript (9): EXC_BAD_ACCESS (code=1, address=0x0)
该错误仅在添加await TrackPlayer.setupPlayer();代码时触发。

相关代码:

import React, { useEffect } from 'react';
import { View, Button } from 'react-native';
import TrackPlayer,{ Capability } from 'react-native-track-player';

const AudioPlayer: React.FC = () => {
  useEffect(() => {
    const setupPlayer = async () => {
      await TrackPlayer.setupPlayer();

      // Ajout de la piste
      const audioPath = require('../../assets/audio/teddy.mp3');
      await TrackPlayer.add({
        id: 'trackId',
        url: audioPath,
        title: 'Teddy Audio',
        artist: 'Inconnu',
        artwork: 'https://www.example.com/artwork.jpg',
      });

      // Configure les contrôles de notification
      TrackPlayer.updateOptions({
        
        capabilities: [
          Capability.Play,
          Capability.Pause,
          Capability.Stop,
        ],
        compactCapabilities: [
          Capability.Play,
          Capability.Pause,
        ],
        notificationCapabilities: [
          Capability.Play,
          Capability.Pause,
          Capability.Stop,
        ],
      });
    };

    setupPlayer();

    return () => {
      TrackPlayer.stop();
    };
  }, []);

  const playAudio = async () => {
    await TrackPlayer.play();
  };

  const pauseAudio = async () => {
    await TrackPlayer.pause();
  };

  return (
    <View>
      <Button title="Lire l'audio" onPress={playAudio} />
      <Button title="Pause" onPress={pauseAudio} />
    </View>
  );
};

export default AudioPlayer;

已尝试但无效的方案:

  • 用try-catch包裹初始化代码捕获错误
  • 验证React Native与react-native-track-player的版本兼容性
  • 配置Android和iOS的必要权限
  • 添加dummy.swift文件

可能的解决方案

1. 清理并重新安装iOS Pod依赖

  • 进入iOS目录:cd ios
  • 移除现有Pods:pod deintegrate
  • 删除Podfile.lock文件和Pods文件夹
  • 重新安装依赖并更新仓库:pod install --repo-update

2. 调整播放器初始化时机与资源清理

将播放器初始化移至App根组件(如App.tsx),避免组件级初始化的竞态问题,同时优化卸载时的资源清理:

// App.tsx中的初始化逻辑
import TrackPlayer, { Capability } from 'react-native-track-player';
import { useEffect } from 'react';

function App() {
  useEffect(() => {
    let isMounted = true;
    const initPlayer = async () => {
      try {
        // 先检查服务是否已运行,避免重复初始化
        const serviceRunning = await TrackPlayer.isServiceRunning();
        if (!serviceRunning) {
          await TrackPlayer.setupPlayer();
          await TrackPlayer.updateOptions({
            capabilities: [Capability.Play, Capability.Pause, Capability.Stop],
            compactCapabilities: [Capability.Play, Capability.Pause],
          });
        }
      } catch (err) {
        console.error('播放器初始化失败:', err);
      }
    };

    initPlayer();

    return () => {
      isMounted = false;
      // 使用destroy彻底清理播放器资源,而非仅stop
      TrackPlayer.destroy();
    };
  }, []);

  // ...其他组件内容
}

3. 修正本地音频文件的路径处理

iOS对本地资源路径的解析逻辑与Android不同,使用TrackPlayer.resolveAssetUrl处理require的资源:

// 替换原音频路径处理代码
const audioAsset = require('../../assets/audio/teddy.mp3');
const audioPath = TrackPlayer.resolveAssetUrl(audioAsset);
await TrackPlayer.add({
  id: 'trackId',
  url: audioPath,
  title: 'Teddy Audio',
  artist: 'Inconnu',
  artwork: 'https://www.example.com/artwork.jpg',
});

4. 完善iOS权限与后台模式配置

  • 在Info.plist中添加音频相关权限描述:
    <key>NSAppleMusicUsageDescription</key>
    <string>需要访问音频资源以播放本地音频</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>需要麦克风权限以支持音频播放控制</string>
    
  • 开启Xcode后台模式:进入项目Target -> Signing & Capabilities -> 添加Background Modes -> 勾选Audio, AirPlay, and Picture in Picture

5. 切换react-native-track-player版本

如果版本兼容性仍有问题,尝试切换到稳定版本:

  • 若使用React Native 0.70+,可升级到v4.x系列(如npm install react-native-track-player@4.0.0)
  • 若RN版本较低,可降级到v3.x稳定版(如npm install react-native-track-player@3.2.0)

内容的提问来源于stack exchange,提问作者FrenchBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:08:19