c# ios
2015-07-25 17:44:34 u013728586 阅读数 194

VS2015安装不多说。其实Xamarin 和微软感觉并不是什么好基友,Xamarin以前一直像个可怜的娃,以插件的形式寄生于VS中。现在只不过形势稍微好点了,VS2015 在明显的地方给了Xamarin一个坑,有点像那啥终于转正的感觉。相信这个坑会给Xamarin 带来不少的广告效应。

这里需要注意很多国内的小朋友因为无法fq, 在vs2015 的Cross Platform 阶段失败,其实这个完全不用管!你只需要自己去下载相应的缺失部分配置好环境变量就好了。特别是Xamarin,你完全可以用国内某论坛上的Xamarin 链接去下离线包,速度杠杠滴。

安装成功后注意看新建项目是这样滴:

如果发现模板少了哪些部分,那就是Xamarin for vs2015 没有装成功。接着是蛋疼时间,你必须拥有一台安装了Mac 系统的电脑作为Pair。代码编译的过程其实是将C#生成的IL代码发到了Mac Host 的机器去负责编译。既然都有了Mac, XCode其实挺好用的,使用VS 是不是有点画蛇添足?况且Xamarin 还是收费的(微软快点收购了这家公司吧)。当然你可以选择只安装Build Host,而不需要完整的装完那坨Xamarin Studio for Mac.

一台Build Host 只能让一台VS 连接配对上,配对的过程比较傻~

示例代码

这个是Xamarin 官方的例子,Xamarin Shop.该项目包含iOS, Android, WP 以及一个公共的代码业务逻辑部分实现。好处在于可以将复杂的逻辑抽离出来,只写一份。3个界面还是采用3种原生的模式开发,以达到节省工作量的目标。

只要运行这个示例,就可以免费得到一件C# T shirt 哦,不管信不信,反正我是填写了便当China的地址, 不知道最终能不能给我漂洋过海寄过来。

Xamarin iOS 开发界面

熟悉的StroyBoard,但是用过了XCode 的界面,总觉得哪里怪怪的,当然你完全可以用XCode 画完界面然后拖回VS2015.

Xamarin For Android

个人觉得这块比较有实际意义,如果哪天Android都用C#来开发了,那Google 不是要恨死 巨软了。事实上Xamarin 开发Android 确实做的还可以。现在又有微软出品的Android模拟器,快,确实快很多,C# 语言又比Java 爽,爽太多。。。这一块,不像iOS制约条件那么多,而且破解版很容易。iOS 的Build Host 破解似乎比较慢。。因此这块就留待各位自己去体验了。

2015-08-07 17:39:21 LiChang719 阅读数 657
mono吧,开源的.net 到这下载framework  www.mono-project.com 到这下载IDE  www.monodevelop.com  mono的目标是用c#开发iOS程序...
2016-07-19 20:15:46 J_Kang 阅读数 1299

                                                             Xamarin开发iOS

       今天,偶然的发现C#能够开发iOS了。到网上查阅了一下资料,原来是Xamarin团队做的跨平台开发技术,最近被微软收购了,最重要的是已经和VS结合了,而且个人版本的开发环境已经不需要花钱了,想必大家一听到免费,大家都会比较感兴趣,哈哈,屌丝我也是其中一员呢。在mac系统上面安装xamarin是非常简单的,首先安装Xcode,因为要用到Xcode的一些东西(模拟器),然后到官网上面下载,按照教程安装就行,安装环境需要的一些插件,都会提醒我们下载的,傻瓜似的安装。

     下面,我来给大家做一个小小的demo,在iOS开发中,tableview我们是用的非常多的。下面的例子就是用C#开发一个tableview,实现一级二级数据的现实。

下面的这个是数据源的class;

using System;
using UIKit;
using Foundation;
using System.Collections.Generic;

namespace Expland
{
	public class MyTableViewSource:UITableViewSource
	{
		string cellReuseId="cellReuseId";
		List<string> firstTitle;
		//构造函数,传递参数
		public MyTableViewSource (List<string> firstTitle)
		{
			this.firstTitle = firstTitle;
		}
		//每一行的内容
		public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
		{
			UITableViewCell cell = tableView.DequeueReusableCell (cellReuseId);
			if (cell == null) {
				cell = new UITableViewCell (UITableViewCellStyle.Default, cellReuseId);
			}
			cell.TextLabel.Text = "123";
			return cell;
		}
		//每一个section的行数
		public override nint RowsInSection (UITableView tableview, nint section)
		{
			return 1;
		}
		//section的个数
		public override nint NumberOfSections (UITableView tableView)
		{
			return firstTitle.Count;
		}
		//section要现实的内容
		public override nfloat GetHeightForHeader (UITableView tableView, nint section)
		{
			return 44f;
		}
		//section的高度
		public override UIView GetViewForHeader (UITableView tableView, nint section)
		{
			UITableViewHeaderFooterView headerView = new UITableViewHeaderFooterView ();
			headerView.TextLabel.Text=firstTitle[(int) section];
			headerView.TextLabel.TextColor = UIColor.Black;

			return headerView;
		}
	}
}


using System;
using Foundation;
using System.Collections.Generic;
using UIKit;

namespace Expland
{
	public partial class ViewController : UIViewController
	{
		UITableView tableview;
		List<string> firstTitle;
		List<Data> secondTitile;

		public ViewController (IntPtr handle) : base (handle)
		{
		}

		public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();
			firstTitle = new List<string> (){ "A", "B", "C", "D", "E", "F" };
		
			InitTableView ();
			InitNavigation ();
			//tableview的数据源
			this.tableview.Source = new MyTableViewSource (firstTitle);

		}
		//tableview初始化
		void InitTableView ()
		{
			tableview = new UITableView (new CoreGraphics.CGRect (0, 0, UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height));
			this.View.AddSubview(tableview);
		}

		//导航栏初始化
		void InitNavigation()
		{
			this.NavigationItem.Title = "首页";
		}
		public override void DidReceiveMemoryWarning ()
		{
			base.DidReceiveMemoryWarning ();
		}
	}
}



2016-03-02 21:53:38 QQ543689819 阅读数 90
钱宝网,想投资的可以注册一个,自己先体验再理性投资。地址:http://www.qbao.com  推广号:58625101
2015-06-25 14:58:00 weixin_34405925 阅读数 10
原文:C#/IOS/Android通用加密解密方法

公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之。下面的是三个平台都可以加密解密的方法。加密解密中用到的key="1234578";在调取方法时传值即可。

C#代码

     #region   跨平台加解密(c#)
        
        /// <summary>
        /// 对字符串进行DES加密
        /// </summary>
        /// <param name="sourceString">待加密的字符串</param>
        /// <returns>加密后的BASE64编码的字符串</returns>
        public string Encrypt(string sourceString, string sKey)
        {
            byte[] btKey = Encoding.UTF8.GetBytes(sKey);
            byte[] btIV = Encoding.UTF8.GetBytes(sKey);
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            using (MemoryStream ms = new MemoryStream())
            {
                byte[] inData = Encoding.UTF8.GetBytes(sourceString);
                try
                {
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
                    {
                        cs.Write(inData, 0, inData.Length);
                        cs.FlushFinalBlock();
                    }

                    return Convert.ToBase64String(ms.ToArray());
                }
                catch
                {
                    throw;
                }
            }
        }


        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="pToDecrypt">要解密的以Base64</param>
        /// <param name="sKey">密钥,且必须为8位</param>
        /// <returns>已解密的字符串</returns>
        public string Decrypt(string pToDecrypt, string sKey)
        {

            //转义特殊字符
            pToDecrypt = pToDecrypt.Replace("-", "+");
            pToDecrypt = pToDecrypt.Replace("_", "/");
            pToDecrypt = pToDecrypt.Replace("~", "=");
            byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            {
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return str;
            }
        }

        #endregion

IOS代码

        static const char* encryptWithKeyAndType(const char *text,CCOperation encryptOperation,char *key)
{
    NSString *textString=[[NSString alloc]initWithCString:text encoding:NSUTF8StringEncoding];
    //      NSLog(@"[[item.url description] UTF8String=%@",textString);
    const void *dataIn;
    size_t dataInLength;
    
    if (encryptOperation == kCCDecrypt)//传递decrypt 解码
    {
        //解码 base64
        NSData *decryptData = [GTMBase64 decodeData:[textString dataUsingEncoding:NSUTF8StringEncoding]];//转utf-8并decode
        dataInLength = [decryptData length];
        dataIn = [decryptData bytes];
    }
    else  //encrypt
    {
        NSData* encryptData = [textString dataUsingEncoding:NSUTF8StringEncoding];
        dataInLength = [encryptData length];
        dataIn = (const void *)[encryptData bytes];
    }
    
    
    CCCryptorStatus ccStatus;
    uint8_t *dataOut = NULL; //理解位type/typedef 缩写(效维护代码比:用int用long用typedef定义)
    size_t dataOutAvailable = 0; //size_t  操作符sizeof返结类型
    size_t dataOutMoved = 0;
    
    dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
    dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
    memset((void *)dataOut, 00, dataOutAvailable);//已辟内存空间buffer首 1 字节值设值 0
    
    //NSString *initIv = @"12345678";
    const void *vkey = key;
    const void *iv = (const void *) key; //[initIv UTF8String];
    
    //CCCrypt函数 加密/解密
    ccStatus = CCCrypt(encryptOperation,//  加密/解密
                       kCCAlgorithmDES,//  加密根据哪标准(des3desaes)
                       kCCOptionPKCS7Padding,//  选项组密码算(des:每块组加密  3DES:每块组加三同密)
                       vkey,  //密钥    加密解密密钥必须致
                       kCCKeySizeDES,//   DES 密钥(kCCKeySizeDES=8)
                       iv, //  选初始矢量
                       dataIn, // 数据存储单元
                       dataInLength,// 数据
                       (void *)dataOut,// 用于返数据
                       dataOutAvailable,
                       &dataOutMoved);
    
    NSString *result = nil;
    
    if (encryptOperation == kCCDecrypt)//encryptOperation==1  解码
    {
        //解密data数据改变utf-8字符串
        result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];
    }
    else //encryptOperation==0  (加密程加密数据转base64)
    {
        //编码 base64
        NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];
        result = [GTMBase64 stringByEncodingData:data];
    }
    
    return [result UTF8String];
    
}
+(NSString*)encryptWithContent:(NSString*)content type:(CCOperation)type key:(NSString*)aKey
{
    const char * contentChar =[content UTF8String];
    char * keyChar =(char*)[aKey UTF8String];
    const char *miChar;
    miChar = encryptWithKeyAndType(contentChar, type, keyChar);
    return  [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];
}

Android代码

        //加密
        public static String DecryptDoNet(String message, String key)
                throws Exception {
            byte[] bytesrc = Base64.decode(message.getBytes(), Base64.DEFAULT);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
            byte[] retByte = cipher.doFinal(bytesrc);
            return new String(retByte);
        }

        // 解密
        public static String EncryptAsDoNet(String message, String key)
                throws Exception {
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
            byte[] encryptbyte = cipher.doFinal(message.getBytes());
            return new String(Base64.encode(encryptbyte, Base64.DEFAULT));
        } 

   最后还要注意一下,一般在客户端调用接口时,请求的是URL地址,参数需要加密,比如token,如果token里含有+号,URL会转码为空格,这时在.net端接收到token时,需要把token中的空格替换为+号:token = Regex.Replace(token, @"\s", "+");这样接收到的token才能正常的解密。

{Unity} c#和iOS Objective-C交互

阅读数 11957

Unity编写iOSnative的Plugin,接入一些sdk什么的,需要和OC进行交互。下面已我写的ios支付插件为例,总结一下。1)c#调用OC代码首先需要在c#中声明OC的函数:#ifUNITY_IOS&amp;&amp;!UNITY_EDITOR[DllImport("__Internal")]privatestatic...

博文 来自: n5

DES 加密 与c#。ios 通用

阅读数 896

key是MD5加密以后,截取前8位,iv也是一样的。public static void initKey() { try { strKey = MD5Utils.getMD5(keyName.getBytes("ASCII")).substring(0, 8) .toUpperCase(); strIv = MD5Utils.getMD5(keyName.ge

博文 来自: ngh8897

C#/IOS/Android通用加密解密方法

阅读数 1285

公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之。下面的是三个平台都可以加密解密的方法。加密解密中用到的key="1234578";在调取方法时传值即可。C#代码#region跨平台加解密(c#)//////对字符

博文 来自: qq_27880427

用c#开发Android和iOS

阅读数 3215

用c#开发Android和iOS很多初学者误以为Android、IOS开发只能使用Java、ObjectC等语言进行开发,其实借助于Mono技术我们可以使用C#/.Net编写Android、IOS程序。由于C#的高效开发和Mono的完美跨平台,这项技术目前已经得到了大量正式商业项目的应用,例如Unity3D就是一个市场占有率非常大的基于Mono技术的使用C#进行跨平

博文 来自: eryongyan

C#/IOS/Android通用加密解密方法

阅读数 2

原文:C#/IOS/Android通用加密解密方法公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密不了,或者反之。下面的是三个平台都可以加密解密的方法。加密解密中用到的key="1234578";在调取方法时传值即可。C#代码    #region...

博文 来自: weixin_34220963
没有更多推荐了,返回首页