文件被导入需要之。markup语言(一种怪类似于HTML的标志语言)可以长足创建UI和UX交互。Reveal是同一舒缓iOS界面调试工具。

iOS9以MetalKit中新增了MetalPerformanceShaders类,可以利用GPU进行快捷之图像计算,比如高斯歪曲,图像直方图计算,索贝尔边缘检测算法等。我多年来恰开修Metal的动,并开了一个高斯模糊的例子作为”HelloWorld”程序,下面分享一下自身的习收获~

留神:运行该次要来一个网版本也iOS9的iOS设备,因为Metal只能够在真机上运行。

率先成立工程:

屏幕快照 2015-10-03 上午10.54.16.png

ViewContoller.swift文本中导入需要的framework:

import MetalKit
import MetalPerformanceShaders

要是起无识别的缪不要担心,把你的装置选到iOS Device比方无是模拟器,错误就见面消失。
导入需要的资源图形及工程里:

AnimalImage.png

要拖到工程文件夹着就是得了,不需拖入Assets.xcassets中:

屏幕快照 2015-10-03 上午11.05.07.png

打开Main.storyboard,拖一个UISlider跻身,这个用来决定高斯模糊的半径。
太特别值设为100:

屏幕快照 2015-10-03 上午11.08.04.png

安装好约束:

屏幕快照 2015-10-03 上午11.09.22.png

屏幕快照 2015-10-03 上午11.09.36.png

屏幕快照 2015-10-03 上午11.09.50.png

最终类似于如此:

屏幕快照 2015-10-03 上午11.10.49.png

ViewContoller.swift文本中拖一个outlet,用来获得模糊半径:

屏幕快照 2015-10-03 上午11.13.57.png

还有一个valueChanged的督察措施,用来实时移模糊效果:

屏幕快照 2015-10-03 上午11.14.26.png

背景设置也黑色:

屏幕快照 2015-10-03 下午2.51.24.png

然后开布置我们Metal代码,首先了解一下MetalPerformanceShaders的利用流程:

  1. 配置MTKView从而来承载模糊的结果
  2. MTKView创新的吩咐队列MTLCommandQueue
  3. 读取资源数量,创建MTLTexture,作为高斯模糊的数据源。
  4. 开创高斯歪曲目标
  5. 运行高斯歪曲,并绘制结果及MTKView
    刺探了要哪几步后咱们规范开勾画代码,首先补充加有要的变量:

    var metalView: MTKView!

    var commandQueue: MTLCommandQueue!

    var sourceTexture: MTLTexture!

使ViewController遵循MTKViewDelegate协议:

class ViewController: UIViewController,MTKViewDelegate{
.........
}

实现其的鲜单代理方:

  func drawInMTKView(view: MTKView) {

    }
    func mtkView(view: MTKView, drawableSizeWillChange size: CGSize) {

    }

率先只措施用来绘制我们的MTKView,第二个方式以MTKView的可绘制区域改变时见面调用。

新建一个措施func setUpMetalView()来配置MTKView,添加以下代码:

    func setUpMetalView(){
        //设置metalView大小,边框等属性
        metalView = MTKView(frame: CGRect(origin: CGPointZero, size: CGSize(width: 300, height: 300)))
        metalView.center = view.center
        metalView.layer.borderColor = UIColor.whiteColor().CGColor
        metalView.layer.borderWidth = 5
        metalView.layer.cornerRadius = 20
        metalView.clipsToBounds = true
        view.addSubview(metalView)

        //读取默认设备.
        metalView.device = MTLCreateSystemDefaultDevice()

        //确保当前设备支持MetalPerformanceShaders
        guard let metalView = metalView where MPSSupportsMTLDevice(metalView.device) else {
            print("该设备不支持MetalPerformanceShaders!")
            return }

        //配置MTKview属性
        metalView.delegate = self
        metalView.depthStencilPixelFormat = .Depth32Float_Stencil8

        // 设置输入/输出数据的纹理(texture)格式
        metalView.colorPixelFormat = .BGRA8Unorm

        //将`currentDrawable.texture`设置为可写
        metalView.framebufferOnly = false


    }

新建一个方式func loadAssets(),用来加载资源数量等操作:

 func loadAssets() {
        // 创建新的命令队列
        commandQueue = metalView.device!.newCommandQueue()

        //设置纹理加载器
        let textureLoader = MTKTextureLoader(device: metalView.device!)
        //对图片进行加载和设置        
        let image = UIImage(named: "AnimalImage")
        //处理后的图片是倒置,要先将其倒置过来才能显示出正图像
        let mirrorImage = UIImage(CGImage: (image?.CGImage)!, scale: 1, orientation: UIImageOrientation.DownMirrored)
        //将图片调整至所需大小
        let scaledImage = UIImage.scaleToSize(mirrorImage, size: CGSize(width:600, height: 600))

        let cgimage = scaledImage.CGImage


        // 将图片加载到 MetalPerformanceShaders的输入纹理(source texture)
        do {

            sourceTexture = try textureLoader.newTextureWithCGImage(cgimage!, options: [:])


        }
        catch let error as NSError {
            fatalError("Unexpected error ocurred: \(error.localizedDescription).")
        }
    }

这边我们由定义了一个UIImage的接近措施,在UIImageextension中添加这个措施:

extension UIImage{

    class func scaleToSize(image:UIImage,size:CGSize)->UIImage{
        UIGraphicsBeginImageContext(size)
        image.drawInRect(CGRect(origin: CGPointZero, size: size))

        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return scaledImage


    }

}

viewDidLoad艺术被调用这简单单方式:

        setUpMetalView()
        loadAssets()

交了最后一步了~在drawInMTKView(view: MTKView)方法被绘制我们的metalView:

 func drawInMTKView(view: MTKView) {
       //得到MetalPerformanceShaders需要使用的命令缓存区
       let commandBuffer = commandQueue.commandBuffer()

       // 初始化MetalPerformanceShaders高斯模糊,模糊半径(sigma)为slider所设置的值
       let gaussianblur = MPSImageGaussianBlur(device: view.device!, sigma: self.blurRadius.value)

       // 运行MetalPerformanceShader高斯模糊
       gaussianblur.encodeToCommandBuffer(commandBuffer, sourceTexture: sourceTexture, destinationTexture: view.currentDrawable!.texture)


       // 提交`commandBuffer`
       commandBuffer.presentDrawable(view.currentDrawable!)
       commandBuffer.commit()
   }

咱们在每次滑块滑动后更绘制metalView:

@IBAction func blurRadiusDidChanged(sender: UISlider) {
        metalView.setNeedsDisplay()
    }

下一场应该就可运行了~结果如下:

运作结果

理所当然真机效果比这只要好过多,插上手机亲自尝试一下咔嚓~

Fuse

Reveal简介:

Reveal是一模一样缓缓iOS界面调试工具,辅助Xcode进行界面调试,使用她可当iOS开发的时刻动态的翻和改动应用程序的界面。

本文章源代码下载:

什么是Fuse

Fuse是同一缓慢可实时创建而互相ios/Android原生应用的软件,它用UX
markup语言(一种异常接近于HTML的号子语言)可以高速创建UI和UX交互,用javaScript编写程序逻辑,除此之外还得导出原生的Xcode项目,在模拟器或者真机上展开操作。
属下去自己望大家详细介绍一下她的安过程,最后带在大家一如既往步一步创建一个UX动画的小示例,并熟悉一下UX
markup是新的言语(目前互联网上关于其的介绍好说几从不)

软件下充斥

率先去官网下载Reveal,下载地址:https://revealapp.com/download/
用图标如下所示:

710官方网站 1

Reveal.png

github地址

Fuse的安装(Mac OSX)

出于下载比较慢(90mb的软件还是生了1只多钟头),所以自己管安装文件传至了百度网盘上:
百度网盘地址
下载了后,打开文件夹,里面有少独东西,一个凡是Fuse的安装包,还有一个凡配套下的编辑器:

安装包

1.率先打开装包Fuse_0_5_3373.pkg

安界面

顿时同样步很简短,只要一直继续/下一致步就是足以就了
开辟终端,输入fuse
而出现以下内容:

Trying to start the daemon as a background process.
A daemon background process was successfully started.

并弹来一个对话框:

启动Fuse

恭喜你!安装成功!

2.开拓另一个文书,把编辑器拖到应用程序文件夹

以Sublime
Text打开一下,再关闭,如果同蹩脚都无打开,就无法安装Fuse的插件,为咱提供代码高亮同机动补齐功能。
打开终端输入以下命令来安装Fuse插件:

fuse install sublime-plugin

亮安装成功后更开编辑器,如果Project菜单项中生出New Fuse
project这同样码说明插件安装成功!

下状况:

一如既往、对于复杂的UI界面,一般我们采取纯代码进行布局,但是每次修改完毕代码都需要还起动模拟器或者真机才能够望效果,相对较累;

其次、当我们怀念使修人家什么贯彻界面效果的上

苟本篇文章针对性您出赞助,请点转爱!您的支撑是自己继续写的动力~

什么创建Fuse项目

开辟终端,使用cd命令将当前目录转至您想只要创Fuse工程的目录,比如桌面:

cd /Users/<你的用户名>/Desktop

输入以下代码,来创造一个叫hello的工程:

fuse create app hello

设若显示出:

Created project hello  at  '<你的Fuse工程目录>'

证明工程创建成功

余合方式:

编纂和运作项目

开辟工程文件,会盼以下几单公文

屏幕快照 2015-08-24 上午9.48.01.png

  • devices.json 放置有模拟器的安排信息

  • hello.unoproj 工程文件

  • MainView.ux 默认生成的UX markup源代码,我们第一在此处展开代码编写
    因此Sublime编辑器打开MainView.ux

屏幕快照 2015-08-24 上午9.54.06.png



这是自动生成的模板文件,可以直接运行,在终端中输入命令来运行它:

      fuse preview

设没有错,应该会面世以下运行结果:

屏幕快照 2015-08-24 上午10.05.45.png

一旦此时你转移MainView.ux的代码,然后保留,你会意识你的变更会实时反映出来,不欲再运行。比如您转移switch标签中之Alignment的价值吗Center,运行结果碰头及时改,如下所示:

屏幕快照 2015-08-24 上午10.56.08.png

本你为堪导出Xcode工程,并于模拟器上运行:

屏幕快照 2015-08-24 上午10.09.png

点击Build

屏幕快照 2015-08-24 上午10.09.59.png

点击Build,然后等待一段时间编译好的Xcode项目会自行打开

屏幕快照 2015-08-24 上午10.10.png

Cmd+R运行它们,如果无问题不怕会打开模拟器,运行我们的工

屏幕快照 2015-08-24 上午10.11.png

下面我们来看望文件之结构,并熟悉一些签,这代码看起颇熟悉,因为此与HTML如有同样方式:

屏幕快照 2015-08-24 上午9.54.06.png

  • 首先<App Theme="Basic" ClearColor="#eeeeeeff"></App>标签,是咱应用程序的接入点,是应用程序的根类
    Theme性定义整个app的外观相当消息,可以起定义,但是时尚未太会为此。。以后我会研究一下。
    ClearColor用来定义app的背景色
  • <DockPanel></DockPanel>标签可以针对她里面的顺序零部件进行排列,将她们锁定到一定方位(Top,Left,Right,Bottom)
  • <StatusBarBackground DockPanel.Dock="Top" />设定手机状态栏的位置,留出相应地空间。
  • <ScrollViewer ClipToBounds="true"></ScrollViewer>一定给iOS中的ScrollView的图,把她里面的要素全部放入一个scrollView中。
  • <StackPanel></StackPanel>本着那个内部的因素以一个势拓展排(水平以及竖直排列,在默认情况下是竖直排列,如果只要水平排列的语,将它的Orientation属性的价改呢”Horizontal”,<StackPanel Orientation="Horizontal">)
    所有标签的动说明可以以它们的Class Reference中找到:
    [UX Class Reference]
    (https://www.fusetools.com/developers/ux)

一: 使用CocoaPods

采取CocoaPods是绝简便的拼方法,尤其适合团队开发,具体的手续如下:

长下的文版到你的 Podfile 文件:

target 'YourMainAppTargetName' do
     pod 'Reveal-SDK', :configurations => ['Debug']
 end

执行:pod install
或者:pod update

当路的干净目录下实施 pod install
命令(如果前都在类型被行使了Cocoapods,执行 pod update 命令)

创一个UX动画的言传身教

始建一个Fuse工程,名为UXAnimation:

新建工程

咱俩如果发生4独不同的UX动画作用,所以率先我们若创含有4页的PageControl元素,首先新建4只新的UX文件,分别表示4独页:
StaggeredAnimation.ux
AnchoredAnimation.ux
ClickEvents.ux
ScrollingBasics.ux
然后我们初始化每一样页:
StaggeredAnimation.ux:

<Panel Background="#FF5C3A">

</Panel>

AnchoredAnimation.ux:

<Panel Background="#FFC05A">

</Panel>

ClickEvents.ux:

<Panel Background="#FF8EB4">


</Panel>

ScrollingBasics.ux:

<Panel Background="#5AB2FF">    

</Panel>

打开MainView.ux:
抹除了App和标签以外的情节:

<App Theme="Basic" ClearColor="#eeeeeeff">
    <StatusBarBackground DockPanel.Dock="Top" />
</App>

创建Panel标签作为我们的画布:

<App Theme="Basic" ClearColor="#eeeeeeff">
    <StatusBarBackground DockPanel.Dock="Top" />
        <Panel>

        </Panel>
</App>

在Panel中开创PageControl,并设置它的页面属性ClipToBounds=”True”,通过Style标签来安:

<App Theme="Basic" ClearColor="#eeeeeeff">
    <StatusBarBackground DockPanel.Dock="Top" />
        <Panel>
            <PageControl ux:Name="myPages" HitTestMode="LocalBoundsAndChildren">
                <Style>
                <Page ClipToBounds="True" />
                </Style>

            </PageContol>
        </Panel>
</App>

始建4个缺损白页:

<App Theme="Basic" ClearColor="#eeeeeeff">
    <StatusBarBackground DockPanel.Dock="Top" />
        <Panel>
            <PageControl ux:Name="myPages" HitTestMode="LocalBoundsAndChildren">
            <Style>
            <Page ClipToBounds="True" />
            </Style>

           <Page></Page>
           <Page></Page>
           <Page></Page>
           <Page></Page>

           </PageContol>          
        </Panel>
</App>

安装第一页:

           <Page>
               <StackPanel Alignment="Top">

           <StatusBarBackground />
           <Text TextAlignment="Center" TextColor="#fff">staggered animation</Text>

                </StackPanel>
                <StaggeredAnimation/>
           </Page>

安装第二页:

           <Page>
               <StackPanel Alignment="Top">

           <StatusBarBackground />
           <Text TextAlignment="Center" TextColor="#fff">anchored animation</Text>

                </StackPanel>
                <AnchoredAnimation/>        
           </Page>

设置第三页:

           <Page>
               <StackPanel Alignment="Top">

           <StatusBarBackground />
                 <Text TextAlignment="Center" TextColor="#fff">event based animation</Text>
                    <Text TextAlignment="Center" TextColor="#fff" Margin="0,12,0,0">tap and press</Text>

                </StackPanel> 
                <ClickEvents/>            
           </Page>

安第四页:

           <Page>
               <StackPanel Alignment="Top">

           <StatusBarBackground />
                <Text TextAlignment="Center" TextColor="#fff">basic scrolling</Text>

                </StackPanel>  
                <ScrollingBasics/>           
           </Page>

最后文件应当会是这样:

MainView.ux

封存,运行一下,你的app应该像这样:

app

为第一页(在StaggeredAnimation.ux中的Panel签内)添加一些代码:

    <StackPanel Alignment="Center" Orientation="Horizontal">
    <Style>
        <Rectangle Width="100" Height="100" CornerRadius="5" Margin="10" Fill="White" />
    </Style>
    <Rectangle ux:Name="rec1"/>
    <Rectangle ux:Name="rec2" />
    <WhilePressed>
        <Rotate Target="rec1" Degrees="90" Duration="0.5" Easing="QuadraticOut" EasingBack="QuadraticIn" />
        <Rotate Target="rec2" Degrees="90" Delay="0.5" Duration="0.5" EasingBack="QuadraticIn" Easing="QuadraticOut" />
    </WhilePressed>
</StackPanel>

以style标签内设置Rectangle的深浅、圆角半径、间距、填充颜色:<Rectangle Width="100" Height="100" CornerRadius="5" Margin="10" Fill="White" />
描绘生个别单矩形,rec1跟rec2:

    <Rectangle ux:Name="rec1"/>
    <Rectangle ux:Name="rec2" />

补偿加长按点击事件响应:

    <WhilePressed>
        <Rotate Target="rec1" Degrees="90" Duration="0.5" Easing="QuadraticOut" EasingBack="QuadraticIn" />
        <Rotate Target="rec2" Degrees="90" Delay="0.5" Duration="0.5" EasingBack="QuadraticIn" Easing="QuadraticOut" />
    </WhilePressed>

当点击任何一个矩形时.两只矩形都见面顺时针旋转90度,由于设置了Delay属性,所以rec1先期旋转,在0.5的延时晚,rec2复转,Easing设置的是进动画的光阴曲线,EasingBack设置的凡归位动画的年华曲线:

UX动画1

AnchoredAnimation.ux被(同样是在Panel标签内)添加代码:

<Rectangle Alignment="Center" Width="100" Height="100" 
    CornerRadius="5" TransformOrigin="TopLeft" Fill="#fff">
    <WhilePressed>
        <Rotate Degrees="90" Duration="1" Easing="BounceOut" EasingBack="BounceIn" EasingBack="BounceIn"/>
    </WhilePressed>
</Rectangle>

一律是长论后矩形顺时针旋转90度过,但是非同等的是,矩形的旋中心给设置到了左上角,这样会起和上一个卡通不相同的意义。Easing设置为BounceOut会使得动画有一个弹回的感到,效果看起格外对:

UX动画2

ClickedEvent.ux未遭(同样是在Panel标签内)添加代码:

    <StackPanel Orientation="Horizontal" Alignment="Center">
        <Style>
            <Rectangle Width="100" Height="100" Margin="10" Fill="White" />
        </Style>

        <Rectangle CornerRadius="5">
            <Tapped>
                <Scale Factor="0.8" Duration="0.3" Easing="QuadraticInOut"/>
                <Move Y="0.3" Duration="0.3" Easing="QuadraticInOut" RelativeTo="Size"/>
            </Tapped>
        </Rectangle>

        <Rectangle ux:Name="fillRectB" CornerRadius="50">
            <WhilePressed>
                <Rotate Degrees="180" Duration="0.5" Easing="QuadraticInOut"/>
                <Change fillRectB.CornerRadius="5" Duration="0.5" Easing="QuadraticInOut"/>
            </WhilePressed>
        </Rectangle>
    </StackPanel>

顾这里来一个新的轩然大波Tapped,它跟WhilePressed的区分是,它是单击后点。
<Scale Factor="0.8" Duration="0.3" Easing="QuadraticInOut"/>
设置的凡当触及事件后拿大小降低至原来的0.8加倍
<Move Y="0.3" Duration="0.3" Easing="QuadraticInOut" RelativeTo="Size"/>
事件触发后将Y坐标增加目标高度的0.3倍,对于此矩形来说,就是朝下活动30独点(如果拿其装也负值那即便是往下移动)。RelativeTo属性设置增加值是故相对于目标的莫大的倍数或者是具体的触发个数,分别对应”Size”和”Point”。
<Rectangle ux:Name="fillRectB" CornerRadius="50">老二只矩形设置圆角半径为50,也就算是彼边长的一半,也就是是一个圈
<Change fillRectB.CornerRadius="5" Duration="0.5" Easing="QuadraticInOut"/>欠动画片的结果是用其圆角半径变为5,也即是易回圆角矩形,下面是运行结果:

UX动画3

下来丰富最终一个卡通:
ScrollingBasics.ux文件被,同样是Panel标签内,添加如下代码:

<Panel Width="300" Height="400">

    <Rectangle Width="300" Height="400" HitTestMode="None" Margin="0" CornerRadius="5">
        <Stroke Width="5" Alignment="Outside" Brush="#FAB2FD" />
    </Rectangle>

    <ScrollViewer ClipToBounds="true">
        <StackPanel ux:Name="stackPanel">
            <Style>
                <Rectangle Height="75" CornerRadius="5" Margin="0, 5, 0, 5" Width="100%" ux:InheritStyle="false" Fill="White" />
            </Style>
            <Rectangle />
            <Rectangle />
            <Rectangle />
            <Rectangle />
            <Rectangle />
        </StackPanel>
    </ScrollViewer>
</Panel>

该动画用ScrollViewer实现了一个好像于iOS中tableView的轮转、弹跳效果
<Panel Width="300" Height="300">
限制ScrollViewer的滚区域
<ScrollViewer ClipToBounds="true">概念一个ScrollViewer用于承载它其中所定义的大都个矩形。由于这几单矩形是遵循竖直方向排列,很明朗要逾ScrollViewer的莫大,所以超过的一对会截断,由于是圆角矩形所以上要下被截断后,圆角尽管会磨:

矩形被截断

关押起不极端好,所以我们要在限制区域及加一个圆角矩形的约束:

    <Rectangle Width="300" Height="400" HitTestMode="None" Margin="0" CornerRadius="5">
        <Stroke Width="5" Alignment="Outside" Brush="#FAB2FD" />
    </Rectangle>

圆角矩形框

即便像这么,当然颜色就是为看得明白,我们若叫她的水彩跟背景融为一体,所以将Brush值改也#5AB2FF,这样尽管到位了代码的修,来探望效果:

UX动画4

总体运作一下app:

完整app

一体化工程文件下充斥:
百度网盘下载
顶之结束,我们做到了针对性是新软件的小探索,其实我们尚从未将Javascript结合及工程被,但是只有用UX
markup我们便早已落实了累累事务,而且它们并无是十分麻烦:
]理所当然我才读了平等龙而已经(准确之说Fuse在8月21日才发布beta版),这就是本人之一点学分享~

其次: 通过吃Xcode配置断点

适用范围:只适用于在模拟器上查看下

1、使用速键 command+7 或者经点击菜单 View → Navigators →
Show Breakpoint Navigator
进入断点设置导航下

710官方网站 2

屏幕快照 2017-03-15 下午2.44.47.png

2、添加断点

710官方网站 3

屏幕快照 2017-03-15 下午2.51.41.png

3、设置断点参数

710官方网站 4

屏幕快照 2017-03-15 下午2.52.39.png

710官方网站 5

2CD79EF2-D099-44F9-9390-F92E7DAC89D5.png

在 1 处写入UIApplicationMain
在 2 处点击 Add Action 按钮,复制下面的仿及输入框内

iOS targets:

 expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer", 0x2) : ((void*)0)

tvOS targets:

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer", 0x2) : ((void*)0)

最后 勾选上 Automatically continue after evaluating actions

最后之结果一旦下图所示:

710官方网站 6

13D2E1DA-29FB-4241-B87F-3F4D17C57E2E.png

只要本篇文章针对性您闹协助,请点转左下角的喜好,大家之支撑是本人连续写的动力!

4、右击,如下图所著进行安装:

710官方网站 7

屏幕快照 2017-03-15 下午3.18.03.png

安装完,此时运作程序于模拟器中,打开Reveal,就会瞥见好之APP的界面了:

710官方网站 8

屏幕快照 2017-03-15 下午3.26.30.png

其三:链接RevealServer.framework 到应用程序

使方法二光会查模拟器上运用,如果想查真机的界面,需要用下这种方法设置,
具体步骤如下:

1、找到RevealServer.framework库

710官方网站 9

屏幕快照 2017-03-15 下午3.36.28.png

2、导入库到程序的根目录下

710官方网站 10

屏幕710官方网站快照 2017-03-15 下午3.39.31.png

3、Xcode配置

点击 TARGETS, 选中 Build Settings

a、输入 Framework Search Paths,在Debeg行设置:

 $(inherited) $(SRCROOT)

b、输入 Other Linker Flags,在Debeg行设置

 -ObjC -lz -weak_framework RevealServer

c、输入 Runpath Search Paths,检查装置是否正如所示

$(inherited) @executable_path/Frameworks

布截图如下:

710官方网站 11

add_framework_search_paths.jpg

710官方网站 12

屏幕快照 2017-03-15 下午4.05.35.png

710官方网站 13

屏幕快照 2017-03-15 下午4.05.47.png

布局好再点击 TARGETS, 选中 Build Phases,添加一个初的
Run Script ,可以为他重新命名也 “Integrate Reveal Server”
或者其他描述都实施,复制下面的本子:

export REVEAL\_SERVER\_FILENAME="RevealServer.framework"

\# Update this path to point to the location of RevealServer.framework in your project.

export REVEAL\_SERVER\_PATH="${SRCROOT}/${REVEAL\_SERVER\_FILENAME}"

\# If configuration is not Debug, skip this script.

[ "${CONFIGURATION}" != "Debug" ] && exit 0

\# If RevealServer.framework exists at the specified path, run code signing script.

if [ -d "${REVEAL\_SERVER\_PATH}" ]; then

"${REVEAL\_SERVER\_PATH}/Scripts/copy\_and\_codesign\_revealserver.sh"

else

echo "Cannot find RevealServer.framework, so Reveal Server will not be started for your app."

fi

部署如下图所示:
长一个 Run Script

710官方网站 14

加上一个Run Script.png

布局好图:

710官方网站 15

屏幕快照 2017-03-15 下午4.01.42.png

此刻于真机上运行程序,便会当Reveal上张好的APP了,大功告成,如下图所示:

710官方网站 16

屏幕快照 2017-03-15 下午4.14.10.png

注意:一定保证真机和电脑当跟一个WIFI下!!!

相关文章