自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android WebView 食用指南

WebView是Android的浏览器控件,内置强大的webkit引擎,支持Html5,通过它得以实现java和js互相调用。一 、权限配置需要在Android Manifest文件里配置internet访问权限,否则无法访问页面。<uses-permission android:name="android.permission.INTERNET"/>二、生成WebView组件两种方式:直接在Activity的onCreate方法里new一个WebView webView

2020-10-10 17:06:04 190 1

转载 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用

今天写了一个更新UI的小例子,没想到出了log打印了这样一个错误:Only the original thread that created a view hierarchy can touch its views。google了一下找到了原因。原来android中相关的view和控件不是线程安全的,我们必须单独做处理。这里借此引出Handler的使用。Handler的官方描述:A Handler allows you to send and process Message and Runnable

2020-08-21 14:11:54 1400

原创 Android获取手机型号、IMEI、系统语言,包名、屏幕宽高等设备信息

获取手机型号。String model = android.os.Build.MODEL;获取手机SDK版本号。String sdk = android.os.Build.VERSION.SDK;获取系统版本号。String release = android.os.Build.VERSION.RELEASE;获取手机品牌。String brand = android.os.Build.BRAND;获取ROM固件名字。String display = andro.

2020-08-11 11:13:42 1538 1

原创 Android APK反编译工具介绍

没有被MD5算法加密,或者未被加固的APK都可以用APKTool+dex2jar+jd-gui反编译。下面一一介绍各个工具的作用、下载地址以及操作方法。一、APKTool作用:用于解析APK的res目录下的文件和AndroidManifest.xml。下载地址:https://ibotpeaches.github.io/Apktool/install/操作方法:将获得的apktool.bat和apktool_版本号.jar放在同一个目录下。如图执行cmd,cd到当前目录下。执

2020-08-10 11:14:53 881

原创 iOS之iCloud云存档实现笔记

ICloud基础在开发者后台创建AppID,启用iCloud服务。在Xcode的Capabilities面板开启iCloud选项,勾选iCloud Documents,之后Xcode会自动在工程目录下生成entitlements文件,里面包含对应的iCloud container id。这个id不能包含通配符’*’。每个新生成的iCloud container都默认包含名为Documents的子目录。这个目录及其子目录都是对玩家可见的。你可以在手机里通过iCloud>Storage &

2020-08-06 11:29:28 1668

转载 通过tag寻找view上面的视图/控件

很多人在开发中会碰到一个问题,当我们在一个VC中想调用一个view上面的某一个控件,而且这个view上面有很多的同类控件,但是我们还不知道我们需要调用的控件具体哪一个的时候,就可以通过tag值来获取.通常有两种方法去获取下面上代码://这是将要寻找的控件UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 25, 40, 20)];label.tag = 123;label.backgroundColor = [UIColor

2020-08-04 10:08:03 518

转载 iOS推送-用Adhoc模式在生产环境中测试Push Notifications功能

本文仅作为个人学习总结记录使用!能力有限,难免会有疏漏和错误,还望指出。共同进步。独白由于我现在开发的应用比较依赖消息推送。但在生产环境中(production)来测试消息推送比较麻烦.问了一下周围的同事,大部分人认为只能在app发布之后,才能验证生产环境下的消息推送。这篇文章,是解决如何在不提交app应用的情况下,使用ad-hoc模式来验证消息推送(push notifications).正文首先要有一个app的发布证书(省略制作步骤),然后制作一个Ad hoc的Provisioning Prof

2020-08-03 15:53:24 756

转载 ios自动重启

需要重启的功能, 可以去下载一个网易新闻客户端, 然后试试他的改变字体功能.他用的方式非常巧妙.从运行效果看, 应该是先通过app访问一个网页, 然后app退出, 网页等待几秒后通过safari再调用app的url scheme.从过程看,没有违反apple的政策.当然这个需要一个http服务器支持.注册url schema打开safari读取自己的服务器页面导航模式后台运行,退出自己服务器页面setTimeout(window.location.href=‘your_schema://xx

2020-08-03 15:36:58 1036

转载 iOS生成服务器使用的pem推送证书

pem文件是服务器向苹果服务器做推送时候需要的文件,主要是做服务器的小伙伴们要用,下面介绍一下pem文件的生成。打开Keychain Access,在Certificates里面找到上篇文章中介绍的包含推送的证书。分别将certificate和private key导出得到.p12文件。例如:Apple Development Push Services > Export “Apple Development Push Services ID123”,保存为 apns-dev-cert.p12。对“

2020-08-03 14:03:51 225

转载 NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化

在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类。通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化。以前,我记得我用的是第三方的插件。但是,苹果出了这套解析后,效率也大大了超过了,所有的解析第三方类库。所以,推荐使用NSJSONSerialization类来完成转化。一、将NSDictionary或NSArray转化为JSON串//将字典或者数组转化为JSON串- (NSData*)toJSONData:(id)the

2020-08-03 13:53:55 244

转载 sed使用变量进行匹配替换的问题

环境:MacOS X 10.8.2在MacOS下使用sed进行字符串替换,并保存到原文件中:sed -i '' 's/源字符/目标字符/g' 文件其中 -i 后面的单引号是设置备份文件。设置为空表示不需要备份。在MacOS 10.8.2环境中,必须设置这个参数,否则不会保存到原文件中。其它版本和系统我没有环境测试,详细不知。以下命令sed -i '.bak' 's/源字符/目标字符/g' foobar.txt在对文件内容进行替换并保存后,会产生一个foobar.txt.bak的备份文件

2020-08-03 12:06:16 1647

原创 iOS如何获取Keychain(钥匙串)的teamID,又名AppIdentifierPrefix

在iOS中,使用Keychain可以把我们要存储的数据以加密的形式存储在独立于App的位置。通过当前项目的Capabilities>Keychain Sharing>On开启Keychain后,会自动生成一个对应的Keychain Groups,以及一个entitlements文件,文件里会有一个Keychain Access Groups,这里存储了所有想要共享部分Keychain数据的App对应的keychain groups的ID,默认第一项名为“$(teamID).你的bundleID

2020-08-03 11:44:11 2632

原创 iOS应用内付费(In-App Purchase,IAP,内购)实现要点总结

在iOS实现内购,需要接入StoreKit framework以完成玩家支付。为了保证支付的安全性,在玩家支付后,游戏并不是立即下发虚拟物品,而是拿着StoreKit从App Store收到的receipts(票据,可以理解为买东西付钱后开的发票),通过本地或者服务器向App Store发起验证,确认交易的合法性后,再发放游戏商品或者解锁游戏特性。接入StoreKit之前的准备工作在App Store Connect配置内购物品的Product ID共有4种内购类型可供选择,其中常用的有两种:Co

2020-07-30 16:48:51 2020

原创 iOS 批量打包总结(支持多target,自定义基于版本号和时间的ipa包名)

在游戏开发中,每次版本发布,我们往往需要针对不同的渠道接入不同的SDK,打入不同的渠道资源,输出特定文件名格式的包并提交给渠道。Android在这方便尤其需要耗费很大的精力,iOS由于只需要针对Appstore,且最多两种包:广告包和付费包,所以省了不小力气。不过如果做一个自动打包的脚本,那么我们就可以从电脑前解放出来,少了些996,多些自我提升的时间。下面给出一个模板#!/bin/sh# 你的xcode工程目录project_path="/Users/用户名/Desktop/工程名"# 工程编译

2020-07-27 15:44:29 494

转载 iphone程序启动互相调用, 打开其他程序

如何点击一个程序调用起来另一个程序的方法调用程序A 被调用程序 BA中要设置一些调用的信息- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self performSelector:@selector(launchMe) withObject:nil afterDelay:0.0]; [window mak

2020-07-23 14:52:07 257

转载 Code=3000 “未找到应用程序的“aps-environment”的权利字符串“ 解决办法

push,即远程通知,教材的资料较少,想实践的话,只能每年花99美元买苹果开发者帐号才能玩这个,所以国内资料较少~。搞了一天证书问题~基本弄明白了。push ,develop需要三个验证:应用程序服务器的证书,用于连接APNs苹果机上装的证书,用于向iphone安装程序iphone上装的配置文件code=3000是由于iphone上的配置文件的app identity是带通配符的那种,导致能装上但拿不到token打开https://developer.apple.com/ios/manag

2020-07-23 11:36:02 645

转载 处理器适配架构(x86_64、armv7、armv7s、arm64、armv8、i386)

模拟器32位(即Mac处理器的指令集):i386模拟器64位(即Mac处理器的指令集):x86_64真机32位(即ARM处理器的指令集):armv7、armv7s真机64位(即ARM处理器的指令集):arm64/armv8项目开发中,可能使用第三方提供的静态库.a文件,或framework文件,如果静态库提供方技术不成熟,使用的时候就会出现问题,例如:要解决以上问题,就要了解一下Apple移动设备处理器指令集相关的一些细节知识。ARM处理器,特点是体积小、低功耗、低成本、高性能,所以几乎所有手

2020-07-23 10:49:39 2474

原创 TeamViewer 连接准备已就绪,连接后一直提示“验证被取消” 的解决方案

疫情期间,需要使用teamviewer远程连接公司电脑进行工作。之前只需要把公司的电脑打开1. 登录teamviewer,将家里的电脑和公司的电脑都关联到teamviwer账户,如图

2020-07-21 14:38:18 11806

原创 iOS 获取设备型号(iPhone+iPad)最新总结

在游戏开发中,我们常常需要获取iOS设备信息来进行数据统计和性能适配。比如在数据统计时,需要获取当前设备的名称,类型,系统名称,系统版本,UUID等,这些都可以通过UIDevice类来获取。代码如下: NSString *deviceName = [[UIDevice currentDevice] name]; // 设备名称,如YIYI的iPhone NSString *deviceModel = [[UIDevice currentDevice] model]; // 设备类型,如 iPad N

2020-06-23 16:52:01 2037

转载 细说 iOS 消息推送

经常有同学问我们,iOS上推送究竟怎么做啊,为什么我的设备总收不到推送呢,这里跟大家集中讨论一下iOS上推送的实现细节。APNS的推送机制与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs:这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了。上图可以分为三步:第一步:AVOS Cloud推送服

2020-06-09 17:35:05 452

原创 iOS crash崩溃日志总结

引言当游戏运行崩溃(也叫闪退)时,iOS系统生成对应的*.crash崩溃日志并保存在设备上。这份崩溃日志通常包含游戏闪退时当时运行的每个线程的堆栈调用信息,我们通过分析这些信息,定位游戏闪退发生的代码位置和异常类型。默认情况下,崩溃日志的堆栈调用信息是一堆16进制的内存地址和偏移量数字组成,如图并不具有可读性。需要将其导入到Xcode,通过对应的dSYM文件和游戏包体,才能将这些数字转化成游戏代码里的调用方法名和所在文件的行数,如图,从而生成我们可以分析的具体堆栈调用信息。一、如何获取崩溃日志。

2020-06-08 16:27:24 1001

原创 Unity出的Android包启动报“Failed to load il2cpp”的解决方案

最近好不容易把Unity升级到2019.3.8f1,Android端出包的同学也成功出包上线了。结果运营反馈有的玩家无法启动游戏,报’Failed to load il2cpp’的错误,如图这在之前从来没有遇到过。后来考虑到这是升级之后出的问题,觉得要么是Unity版本的bug,要么是升级不当导致的。当时Unity最新的版本已经到了2019.3.14f1,看了一遍3.8以后的release note,发现都没有提到这类bug。百度google搜索出来的提到有关这个问题的也说在2019.3.0a就已经

2020-06-04 15:56:15 34425

原创 不开启屏幕旋转, 监听iOS屏幕旋转状态

// 按钮适应屏幕的旋转-(void)rotation_btn:(float)n { UIButton *testBtn= [self.view viewWithTagName:@"TestBtn"]; testBtn.transform = CGAffineTransformMakeRotation(n*M_PI/180.0);}// 屏幕旋转状态变化- (void)orientationChanged:(NSNotification *)note { UIDeviceOrient

2020-06-04 10:12:18 345

转载 iOS7.1企业应用 无法安装应用程序 因为证书无效 的解决方案

今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。StackOverFlow链接:Enterprise app deployment doesn’t work on iOS 7.1原因是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https。因此,只要将原链接:itms-ser

2020-06-04 09:37:27 395

转载 NSString 与C++ string字符串的互转

string 转换为 NSString std::string str("hello"); NSString *str = [NSString stringWithString:str.c_str()]; NSString *istr = [NSString stringWithString:@"zsh"]; str = [istr cStringUsingEncoding: NSUTF8StringEncoding]; NSString *path = [[NSBundle main.

2020-06-03 17:11:48 286

转载 iOS APNS推送总结

一、APNS提供了两项基本的服务:1. 消息推送测试接口:gateway.sandbox.push.apple.com:219产品接口:gateway.push.apple.com:21952. 反馈服务测试接口:sandbox:feedback.push.apple.com:2196产品接口:feedback.sandbox.push.apple.com:2196二、APNS推送调用函数:app未打开开启的情况下:app调用didFinishLaunchingWithOption

2020-06-03 16:54:57 348

转载 Java发送ios推送消息(APN)的代码示例

实际项目应用中,应该考虑使用开源项目java-apns:https://github.com/notnoop/java-apns千万不要用一个叫JAVAPNS的项目。这个开源项目的代码非常烂,每次发送消息都重新建立socket连接。在apple的文档中,都明确的说了会把这种行为当作dos攻击行为。性能差就更不用说了。ios手机上要安装对应的应用。该应用与.p12证书文件应该匹配。apple官方的,关于APN服务,和apn的feedback的文档在这个地方:https://developer.appl

2020-06-03 16:35:36 484

转载 iPhone消息推送机制实现与探讨

最近两天在研究ios的消息推送机制。研究这个东西,还是充满兴趣的。Push的原理:Push 的工作机制可以简单的概括为下图图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。上图可以分为三个阶段。第一阶段:.net应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。第二阶段:APNS在自身的已注

2020-06-03 15:38:21 189

转载 iOS去掉icon的(自带磨光效果)gloss effects

只需两步在项目的plist文件,最上层add row ,内容 icon already includes gloss effects 设置成 YES。在 icon files 字段里添加 icon already includes gloss effects 设置成 YES.如图:

2020-06-03 13:51:23 176

转载 iOS UIApplication深入学习

很多时候,我们不需要关心这个类,我们很少继承这个类,偶尔会调用这个类的api来实现一些功能,但是不可否认,这个类是iOS编程中很重要的一个概念。UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。回想一下我在前面的文章“main函数研究”的文章中提到的main函数的代码,可以看出,在程序开始运行的时候,UIApplicationMain函数是程序进入点,这个函数做了很多工作,其中一个重要的工作

2020-06-03 13:33:39 128

原创 iOS 获取自定义字体名称并使用

将字体文件xx.tff拖入工程。在info.plist任意键值对上按右键——》Add Row,添加一个新键"Fonts provided by application",如图执行下面代码获取xx.tff对应的字体族名称,字体名称。NSArray* familys = [UIFont familyNames];for (int i = 0; i < [familys count]; i++) { NSString* family = [familys objectAtIndex:i];.

2020-06-02 16:49:07 557

转载 C# 彻底搞懂async/await

前言Talk is cheap, Show you the code first!private void button1_Click(object sender, EventArgs e){ Console.WriteLine("111 balabala. My Thread ID is :" + Thread.CurrentThread.ManagedThreadId); AsyncMethod(); Console.WriteLine("222 balabala. My

2020-06-02 10:32:35 297

原创 Unity中如何自动缓存所需的UI组件

在游戏开发中,拼UI界面和写UI逻辑是少不了,甚至是绝大多数的事。写UI逻辑时候,我们经常要缓存UI组件,如果不想一遍遍重写各种不同的缓存组件代码,可以考虑利用反射批量获取要缓存的组件以自动缓存所需的UI组件。

2020-06-01 16:47:45 416

原创 C#获取文件的MD5值

public static string GetMD5HashFromFile(string fileName) { try { FileStream file = new FileStream(fileName, FileMode.Open); System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoSer...

2020-05-22 17:23:40 771

原创 Unity中如何默默的执行cmd批处理命令

public static void RunCmd(string cmd, out string output) { cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态 UnityEngine.Debug.Log(cmd); using (Process p = new Process()) ...

2020-05-22 16:54:23 780

转载 C# 反射的委托创建器

.Net 的反射是个很好很强大的东西,不过它的效率却实在是不给力。已经有很多人针对这个问题讨论过了,包括各种各样的 DynamicMethod 和各种各样的效率测试,不过总的来说解决方案就是利用 Expression Tree、Delegate.CreateDelegate 或者 Emit 构造出反射操作对应的委托,从而实现加速反射的目的。虽然本篇文章同样是讨论利用委托来加速反射调用函数,不过重点并不在于如何提升调用速度,而是如何更加智能的构造出反射的委托,并最终完成一个方便易用的委托创建器 Deleg

2020-05-22 15:55:31 221

转载 使用ToUpperInvariant避免使用ToUpper

ToUpperInvariant使用不依赖于区域性进行转换,而ToUpper则使用了当前线程的CultureInfo,进行转换,所以性能会有所影响,以下为测试: [Test] public void TestInvariant() { Int32 count = 1000 * 1000; Stopwatch watch = new Stopwatch(); String str = "abcdefg

2020-05-22 15:32:15 783

转载 有关C#标签Attribute的熟悉

Attribute 简单用法:最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了。一.什么是Attribute先看下面的三段代码:自定义Attribute类:VersionAttribute [AttributeUsage(AttributeTargets.Class)] public class VersionAttribute : Attribute { public string Name { get; set; } publi

2020-05-22 14:42:30 158

原创 Unity中如何优雅的将Excel单元格数据转换成基础类型或者数组

在游戏开发中经常需要把策划提供的Excel表格转换成Unity可以序列化读取的ScriptableObject对象。不同的单元格数据可能会被转换成不同的类型,如string,int,float,bool,Enum等。为了简洁转换代码,可以定义一个泛型方法ToValue统一处理。using System;public class ExcelReader{ protected T ToValue<T>(string s) { Type type = typeo

2020-05-22 14:04:09 721

转载 C#中string.format用法详解

String.Format 方法的几种定义:String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Ob

2020-05-21 17:54:55 765

最新APK反编译工具合集.zip

APK反编译工具合集 1. apktool_2.4.1, 用于解析资源res和资源AndroidManifest.xml 2. dex2jar-2.0, 用于将classes.dex转换成jar包 3. jd-gui-windows-1.6.6, 用于将java包或者class文件夹转换成java源码

2020-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除