iOS开发 - app上架报错(环信框架问题)

最近在整理这段时间被别人闻到集成环信可能会出现的问题 ,记得的也不太多,想到一个就在这里记录一个吧,如果有遇到过本文中没有列出来的,可以问我,我会一一解答的

1. pod引入的Hyphenate里面的.h文件中和手动下载的sdk相比会缺少Hyphenate.h 。
A :   主要是pod 问题 本地仓库太旧了, 终端行pod repo update, 之后在pod search 'Hyphenate' 如果可以找到3.3.0版本, 就可以下载了 podfile 里面 platform 要指定8.0

2. iOS SDK 从低版本 升到3.3.0 后运行报错
dyld: Library not loaded: @rpath/Hyphenate.framework/Hyphenate
  Referenced from: /Users/white/Library/Developer/CoreSimulator/Devices/BE0DDC26-96AE-4396-A6C5-48DC6938042B/data/Containers/Bundle/Application/4F9F570A-44B5-4F81-AD19-F7AA38D26E40/SYSchoolProject.app/SYSchoolProject
  Reason: image not found


A : 在Build setting -> General这里加上。 还有这里也加上 改不能成optional



3.在AppDelegate中执行[EaseMob sharedInstance]崩溃
A : other link flags添加“-ObjC”选项(注意:O和C大写)


4.在消息提示的小红点问题。在UITabBarController的子类中设置了IChatManagerDelegate,但是setupUnreadMessageCount不回
A : 在AppDelegate中没有写如下代码
[objc]  view plain  copy
 print ?
  1. - (void)applicationWillResignActive:(UIApplication *)application {  
  2.     [[EaseMob sharedInstance] applicationWillResignActive:application];  
  3.  }  
  4.   
  5. - (void)applicationDidEnterBackground:(UIApplication *)application {  
  6.     [[EaseMob sharedInstance] applicationDidEnterBackground:application];  
  7. }  
  8.   
  9.  - (void)applicationWillEnterForeground:(UIApplication *)application {  
  10.     [[EaseMob sharedInstance] applicationWillEnterForeground:application];  
  11. }  
  12.   
  13.  - (void)applicationDidBecomeActive:(UIApplication *)application {  
  14.     [[EaseMob sharedInstance] applicationDidBecomeActive:application];  
  15. }  
  16.   
  17.  - (void)applicationWillTerminate:(UIApplication *)application {  
  18.     [[EaseMob sharedInstance] applicationWillTerminate:application];  
  19. }  

5.‘Hyphenate/EMSDK.h’ file no found

A : 换下引用#import <HyphenateLite/HyphenateLite.h>

     或者#import <Hyphenate/Hyphenate.h>

     如果此方法不行, 可以试试选中你的项目中的Pods -> EaseUI->Build Phases->Link Binary With Libraries ,点➕->Add Other ,找到工程里面,Pods里面的Hyphenate文件夹下面的Hyphenate.framework 点击open,重新编译就好了




6.

A :  可以参考问题2的基础上 再看下相对路径那里


7.集成动态库上传AppStore出现问题, 打包上线时报错
ERROR ITMS-90087: "Unsupported Architectures. The executable for xiantaiApp.app/Frameworks/Hyphenate.framework contains unsupported architectures '[x86_64, i386]'."
A :  遇到这个问题的小伙伴一定是没有认真看咱们环信的官方文档,

由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交审核

在SDK当前路径下执行以下命令删除i386 x86_64两个平台
实时音视频版本Hyphenate.framework

lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7
lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64
lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate
mv Hyphenate Hyphenate.framework/

不包含实时音视频版本HyphenateLite.framework

lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7
lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64
lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite
mv HyphenateLite HyphenateLite.framework/
实时音视频版本版本为例 : 执行完以上命令如图所示

运行完毕后得到的Hyphenate.framework就是最后的结果,拖进工程,编译打包上架。

注意 : 最后得到的包必须真机编译运行,并且工程要设置编译二进制文件General->Embedded Bunaries.

注意 : 
1. 最后得到的包必须真机编译运行,并且工程要设置编译二进制文件General->Embedded Bunaries.
2. 删除i386、x86_64平台后, SDK会无法支持模拟器编译 ,只需要在上传AppStore时在进行删除,上传后,替换为删除前的SDK,建议先分别把i386、x86_64、arm64、armv7各平台的包拆分到本地,上传App Store时合并arm64、armv7平台,并移入Hyphenate.framework内。上传后,重新把各平台包合并移入动态库


打包时还有可能报这个错误
ERROR ITMS-90535: "Unexpected CFBundleExecutable Key. The bundle at 'Payload/xiantaiApp.app/EaseUIResource.bundle' does not contain a bundle executable. If this bundle intentionally does not contain an executable, consider removing the CFBundleExecutable key from its Info.plist and using a CFBundlePackageType of BNDL. If this bundle is part of a third-party framework, consider contacting the developer of the framework for an update to address this issue."
A :   从EaseUIResource.bundle中找到info.plist删掉CFBundleExecutable,或者整个info.plist删掉

8.ios apns推送是什么原因导致这个错误
注册deviceToken失败:application:didFailToRegisterForRemoteNotificationsWithError: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}
A: 工程配置没有打开推送功能。


9.运行demo报这个错误

A: 没有存储空间了。

10.导入EaseUI后,工程中出现如下错误


A: 其实碰到上面这个问题还是很好解决的,这个是因为用到了UIKit里的类,但是只导入了Foundation框架,这个错误在其他类里也会出现,我们可以手动修改Founfation为UIKit,但是我不建议这么做,第一这个做法的工程量比较大, 在其他类里面也要导入,二,不利于移植,当以后环信更新的时候我们还是需要做同样的操作,这里我的做法的创建一个pch文件,在pch文件里面导入UIKit。

解决办法:建一个PCH文件在里面添加如下代码:

#ifdef __OBJC__

    #import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#define NSEaseLocalizedString(key, comment) [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"EaseUIResource" withExtension:@"bundle"]] localizedStringForKey:(key) value:@"" table:nil]

#endif

以上应该会正常了,但是如果集成的是不包含实时音视频的SDK , 手动导入EaseUI的话 , 那么此时还会报跟第六点一样的错误
这时需要把 #import <Hyphenate/Hyphenate.h>注释掉,然后把报错地方的Hyphenate换成HyphenateLite就可以了

11.pod导入EaseUI 时报错 

A : 先进入Podfile文件中,添加pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git' ,保存退出之后执行pod update即可 ,如果还是失败,可以升级一下pod版本


上线打包出现错误整理90362,90535,4238   

error itms 90362
上传appstore 一直报错ERROR ITMS-90362: "Invalid Info.plist value. The value for the key 'MinimumOSVersion' in bundle WholeNet.app/Frameworks/Charts.framework is invalid. The minimum value is 8.0" 
解决方法:由于在引入第三方版本的问题,需要在第三方静态库的plist文件里面把   minimum value 改成 8.0以上,8.0以下是不支持的。

error itms 90535
解决方法: 搜索静态库info.plist  ,将第三方的info。plist文件中的Executable file 字段删除即可

error itms 4238
解决方法:这是上传版本的问题,说appstrone里面已经存在了这个版本,你需要把内部版本号修改一下,别冲突就行,info.plist里面有 Bundle versions string, short(版本号),Bundle version(内部版本号),就ok了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值