标签: reachability

复制了来自apple的reachability-test,但链接器失败了

我试图使用apple发布的reachability-project来检测自己的例子中的可达性.我复制了最多的初始化,但是我在链接器中遇到了这个失败:

Ld build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test normal armv6
cd /Users/uid04100/Documents/TEST
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1.3
setenv PATH  "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -L/Users/uid04100/Documents/TEST/build/Debug-iphoneos -F/Users/uid04100/Documents/TEST/build/Debug-iphoneos -filelist /Users/uid04100/Documents/TEST/build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test.LinkFileList -dead_strip -miphoneos-version-min=3.1.3 -framework Foundation -framework UIKit -framework CoreGraphics -o /Users/uid04100/Documents/TEST/build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test
Run Code Online (Sandbox Code Playgroud)

未定义的符号:
"_SCNetworkReachabilitySetCallback",引自: - Reachability.o中的[ - Reachability startNotifer]
"_SCNetworkReachabilityCreateWithAddress",引自:Reachability.o中的:[Reachability reachabilityScheduseWithRunLoop]
,引用自: - [Reachability startNotifer] .o
"_SCNetworkReachabilityGetFlags",引自: - Reachability.o中的[Reachability connectionRequired] - Reachability.o中的[Reachability currentReachabilityStatus]
"_SCNetworkReachabilityUnscheduleFromRunLoop",引自: - Reachability.o中的[Reachability stopNotifer]
"_SCNetworkReachabilityCreateWithName",引用自: + Reachability.o中的[Reachability reachabilityWithHostName:]
ld:找不到符号
collect2:ld返回1退出状态

我的代表团:

#import <UIKit/UIKit.h>

@class Reachability;

@interface testAppDelegate : NSObject
<UIApplicationDelegate> {  UIWindow
*window;  UINavigationController *navigationController;

 Reachability* hostReach; …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa reachability

7
推荐指数
1
解决办法
4959
查看次数

使用可达性的大内存泄漏

使用设备上的仪器,它在我的应用程序中使用Apple的Reachability 2.0代码检测到3.50 KB的内存泄漏.泄漏的对象是GeneralBlock-3584.泄漏工具指向以下代码:

- (BOOL) startNotifer
{
    BOOL retVal = NO;
    SCNetworkReachabilityContext    context = {0, self, NULL, NULL, NULL};
    if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context))
    {
        // THIS IS LINE OF CODE WHERE THE LEAK OCCURS:
        if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode))
        {
            retVal = YES;
        }
    }
    return retVal;
}
Run Code Online (Sandbox Code Playgroud)

我几乎直接使用Apple示例代码中的Reachability示例,所以我无法弄清楚为什么会发生这种情况或我如何修复它.

memory iphone xcode memory-leaks reachability

7
推荐指数
1
解决办法
2053
查看次数

无网络情况后,可达性导致崩溃 - 如何异步正确使用可达性

我的iPhone应用程序正在开发中遇到一个非常奇怪的崩溃.似乎每当我向朋友展示我的应用程序时它都会崩溃,但是否则它永远不会崩溃.在被墨菲的法律方面普遍迷惑之后,我已经确定了崩溃的模式 - 纽约市地铁.我使用地铁后,我的应用程序一直崩溃.我已将这个问题追溯到我的使用Reachability.应用程序在无网络情况(不包括飞行模式)下使用后,下次崩溃.Reachability在执行任何其他网络操作之前​​,我遵循Apple的指导原则并检查连接,但我发现了一些有关如何调用它的相互矛盾的文档.

目前我正在做这样的事情:

-(BOOL)reachable {
    Reachability *r = [Reachability reachabilityWithHostName:@"www.stackoverflow.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
        return NO;
    }
    return YES;
Run Code Online (Sandbox Code Playgroud)

}

我正在调用与viewDidAppear调用的方法同步.

    if ([self reachable]== YES) {
        ... do network stuff ...
Run Code Online (Sandbox Code Playgroud)

它基于iOS 4 Reachability Guide的代码

我的问题:是否正确使用Reachability它将处理此错误并处理缺少3G或Wifi网络?我是否需要生成另一个线程或执行某些操作来删除同步调用?

顺便说一句,这是我在应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题.


Application Specific Information:
(app name) failed to resume in time

Elapsed total CPU time (seconds): 3.280 (user 1.770, system 1.510), 33% CPU 
Elapsed application CPU time (seconds): 0.040, 0% …

iphone reachability

7
推荐指数
2
解决办法
3552
查看次数

可达性帮助 - WiFi检测

我已将Reachability导入到我的应用程序中,并且我还有几个方法问题.让我先解释一下我的应用程序和其他工具.

该应用程序通过3G与同一时间,ad-hoc网络和互联网进行通信.注意:ad-hoc网络未连接到Internet.这非常有效 - 它已经实现并且测试得非常好.

话虽如此,我想实现Reachability来检测两件事.

1)用户是否连接到wifi ad-hoc网络?(如果可能的话,更好的方法是检测它是否连接到前缀为WXYZ的wifi ad-hoc网络.例如,如果列出了两个网络,一个名为Linksys,另一个名为WXYZ-Testing_Platform,它知道是否与WXYZ连接).

2)用户可以通过3G(或2G等)连接到互联网并访问我们的服务器吗?

提前致谢

编辑包括对未来寻求者的回答:

对于1),我的代码如下所示:

.h
#import <SystemConfiguration/CaptiveNetwork.h> //for checking wifi network prefix

.m
- (BOOL) connectedToWifi
{

    CFArrayRef myArray = CNCopySupportedInterfaces();
    // Get the dictionary containing the captive network infomation
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));

    NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);

    NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict;
    NSString* ssid = [dict objectForKey:@"SSID"];

    if ([ssid rangeOfString:@"WXYZ"].location == NSNotFound || ssid == NULL)
    {
        return false;
    }
    else
    {
        return true; …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c reachability

7
推荐指数
1
解决办法
3191
查看次数

检测wifi已启用(无论是否已连接)

对于GPS跟踪应用程序,在打开WIFI的情况下记录位置信号会导致真正不精确的数据或带有间隙的数据.

我已经使用Reachability查询来检测在开始跟踪之前wifi是否可用.问题是,如果在进行该查询时启用了wifi但未连接到网络,则表明无法通过wifi访问互联网,但这并不表示设置应用中是否禁用了该设置.这意味着如果用户开始运行并且在中途运行连接,他们将从wifi而不是GPS或蜂窝网络获得位置信号.因此,这些数据点的准确度可能> 10米,所以我想跳过这一点.问题是,在wifi上,他们将有一个很大的空白时段,他们的信号没有被记录下来.

那么如何检查wifi是否已启用但已断开连接?

我已经阅读了我能找到的所有其他可达性讨论,但这似乎是一个差距,有很多回复错误地表明可达性解决了这个开箱即用的问题.

...而且我不会要求 wifi - 只是提醒他们启用它的事实,因此在他们的锻炼中的某些时候他们的位置数据可能会丢失(由于不准确).

gps wifi reachability ios

7
推荐指数
1
解决办法
1759
查看次数

有没有办法知道iPhone连接到什么网络(LTE与GSM)

随着iOS 6和iphone 5的发布,我试图找出我的应用程序如何知道手机是否处于LTE模式与GSM模式.

我还没有看到Reachability API的任何更新,它可以判断它是否连接到Wifi和WWAN,但我需要知道它是什么类型的WWAN连接.

有任何想法吗?

iphone objective-c reachability ios6 lte

7
推荐指数
2
解决办法
3180
查看次数

可达性与NSURLSession响应以检测互联网连接

我正在为我的API调用构建错误案例,并希望检查互联网连接不可用时的情况.

dataTaskWithRequest似乎处理这个很好,并返回NSError代码-1009与无互联网连接的描述.我不必等待请求超时.

在什么情况下我想要使用Reachability Framework?谢谢

reachability ios nsurlsession swift

7
推荐指数
1
解决办法
4259
查看次数

iPhone - 使用Reachability抛出重复的符号_OBJC_IVAR错误

我已将Apple Reachability文件添加到我的项目中,我已经收到错误.我甚至没有将这些文件添加到我的任何类中,只是将它们添加到我的项目中.我怎么可能已经收到此错误?

编译时我收到以下错误:

ld: duplicate symbol _OBJC_IVAR_$_Reachability.localWiFiRef in /Users/webmaster/Dropbox/iPhone-Development/Official-Projects/PUC/build/PUC.build/Debug-iphonesimulator/PUC.build/Objects-normal/i386/Reachability-B40F6D608A62C635.o and /Users/webmaster/Dropbox/iPhone-Development/Official-Projects/PUC/build/PUC.build/Debug-iphonesimulator/PUC.build/Objects-normal/i386/Reachability-823B59DA9A9B0D23.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用Three20项目,所以我不确定它是否会以某种方式发生冲突?

iphone objective-c reachability ios

6
推荐指数
1
解决办法
3486
查看次数

从未调用可达性通知

我在代码中使用Reachability很困难.我想通过在启动时启动观察者然后只是接收更改通知来保持它非常简单.在以下代码中,永远不会调用reachabilityChanged方法.我尝试了很多迭代,但这是最简单的版本.它编译并运行.请帮忙...

**** AppDelegate.h代码****

#import <UIKit/UIKit.h>

#ifdef PHONEGAP_FRAMEWORK
    #import <PhoneGap/PGViewController.h>
    #import <PhoneGap/PGURLProtocol.h>
    #import <PhoneGap/Reachability.h>
#else
    #import "PGViewController.h"
    #import "PGURLProtocol.h"
    #import "Reachability.h"

#endif

@interface AppDelegate : NSObject < UIApplicationDelegate, UIWebViewDelegate, PGCommandDelegate> {
    NSString* invokeString;
}

@property (nonatomic, copy)  NSString* invokeString;
@property (nonatomic, strong) IBOutlet UIWindow* window;
@property (nonatomic, strong) IBOutlet PGViewController* viewController;

@end
Run Code Online (Sandbox Code Playgroud)

**** AppDelegate.m代码段****

#import "AppDelegate.h"

#import "MainViewController.h"

#ifdef PHONEGAP_FRAMEWORK
    #import <PhoneGap/PGPlugin.h>
    #import <PhoneGap/PGURLProtocol.h>
    #import <PhoneGap/Reachability.h>
#else
    #import "PGPlugin.h"
    #import "PGURLProtocol.h" …
Run Code Online (Sandbox Code Playgroud)

objective-c app-store reachability appstore-approval ios

6
推荐指数
1
解决办法
6745
查看次数

我们可以在iOS上阅读无线数据权限吗?

如果无法访问互联网,是否可以通过编程方式区分以下权限案例?

  1. 用户拒绝为应用程序使用数据的权限的情况.
  2. 用户已授予使用数据权限但手机处于飞行模式(或根本没有SIM/WiFi)的情况.

允许应用使用数据

我想阅读那些无线数据权限,以区分上述情况以获得更友好的错误消息(即在一种情况下我建议验证权限,在另一种情况下我建议检查飞行模式)

基于如何在Swift中使用SCNetworkReachability,我所能找到的就是获得互联网可达性,但它不知道实际的权限:

import SystemConfiguration

@available(iOS 9.0, macOS 10.11, *)
static func internetConnectionIsReachable() -> Bool {
    var zeroAddress = sockaddr_in6()
    zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
    zeroAddress.sin6_family = sa_family_t(AF_INET6)
    guard let reachability = withUnsafePointer(to: &zeroAddress, {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
            SCNetworkReachabilityCreateWithAddress(nil, $0)
        }
    }) else {
        return false
    }
    var flags: SCNetworkReachabilityFlags = []
    guard SCNetworkReachabilityGetFlags(reachability, &flags) else {
        return false
    }
    return flags.contains(.reachable)
}
Run Code Online (Sandbox Code Playgroud)

reachability ios ios-permissions

6
推荐指数
1
解决办法
145
查看次数