小编Rom*_*ain的帖子

使用Google App Engine时无效和/或缺少SSL证书

更新:请,如果有人可以提供帮助:谷歌正在等待他们的错误跟踪工具上的输入和此问题的示例.如果您有针对此问题的可重现步骤,请分享:https://code.google.com/p/googleappengine/issues/detail?id = 10937

我正在尝试使用Google App Engine后端从StackExchange API获取数据.您可能知道,StackExchange的某些API是特定于站点的,要求开发人员针对用户注册的每个站点运行查询.

所以,这是我从这些网站获取时间线数据的后端代码.该feed_info_site变量保存StackExchange站点名称(如'security','serverfault'等).

    data = json.loads(urllib.urlopen("%sme/timeline?%s" % 
        (self.API_BASE_URL, urllib.urlencode({"pagesize": 100, 
        "fromdate": se_since_timestamp, "filter": "!9WWBR
        (nmw", "site": feed_info_site, "access_token": 
    decrypt(self.API_ACCESS_TOKEN_SECRET, self.access_token), "key": 
self.API_APP_KEY}))).read())
for item in data['items']:
    ... # code for parsing timeline items
Run Code Online (Sandbox Code Playgroud)

在除Stack Overflow之外的所有站点上运行此查询时,一切正常.有点奇怪的是,当feed_info_site变量设置为时'stackoverflow',我从Google App Engine收到以下错误:

    HTTPException: Invalid and/or missing SSL certificate for URL: 
https://api.stackexchange.com/2.2/me/timeline?
filter=%219WWBR%28nmw&access_token=
    <ACCESS_TOKEN_REMOVED>&fromdate=1&pagesize=100&key=
<API_KEY_REMOVED>&site=stackoverflow
Run Code Online (Sandbox Code Playgroud)

当然,如果我在Safari中运行相同的查询,我会得到我期望从API获得的JSON结果.所以问题实际上在于Google的URLfetch服务.我在Stack Overflow上发现了几个与类似的HTTPS/SSL异常相关的主题,但没有接受的答案解决了我的问题.我试过删除cacerts.txt文件.我也试过打电话validate_certificate=False,没有成功.

我认为问题与HTTPS/SSL并不严格相关.如果是这样,您如何解释更改单个API参数会导致请求失败?

ssl google-app-engine urlfetch

64
推荐指数
1
解决办法
3046
查看次数

构建一个Swread框架,引用Objective-C代码

我正在开发一个用Swift编写的iOS项目,我想从常规的"app"项目中取出一些类,然后将它捆绑到一个可重用的Swift框架中(也许可以在Github和Cocoapods上公开发布) ).

我遇到了问题,因为框架看起来似乎不能有Objective-C桥接头,但为了编译我的框架代码,我需要引用几个Objective-C类(在这种情况下:Google Maps iOS SDK).

我还在我的框架项目中添加了GoogleMaps.framework作为链接库,但是,如何从Swift代码"导入"它?

使用当前工具和Swift版本甚至可以实现这一点,我该如何处理?

谢谢.

xcode objective-c ios ios-frameworks swift

18
推荐指数
1
解决办法
6659
查看次数

使用Swift构建Cocoapod并依赖Objective-C框架

我知道关于这个主题已经有一些关于SO的问题,但是很少有人接受了答案,我认为我没有找到与我相同的问题.

我正在构建一个Swift pod,在我的代码中,我依赖于Google Maps iOS SDK,它被捆绑为一个.framework文件.该项目在Xcode中构建正常,但是我很难将lib发布到Cocoapods.

我设法有一个Podspec几乎使用该pod lib lint命令验证的文件.但是,现在我已将Google-Maps-iOS-SDKpod 添加为Podspec文件中的依赖项,但它失败并显示以下消息:

$ pod lib lint

[!]'Pods'目标具有包含静态二进制文件的传递依赖:(/private/var/folders/n2/qyjfpk6n7zz_mngtwswlmsy00000gn/T/CocoaPods/Lint/Pods/Google-Maps-iOS-SDK/GoogleMaps.framework)

$

这是预期的吗?为什么我不能在我自己的基于Swift的pod中添加Google Maps iOS SDK作为pod引用?

这是Podspec:

Pod::Spec.new do |s|
s.name                  = '(name)'
s.version               = '1.0.0'
s.summary               = '(summary)'
s.platforms             = { :ios => '8.0', :osx => '10.10' }
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.10'
s.license               = { :type => 'BSD', :file => 'LICENSE' }
s.source_files          = 'Sources/*.{h,swift}', '*.framework'
s.source                = { :git => …
Run Code Online (Sandbox Code Playgroud)

lint ios cocoapods google-maps-sdk-ios swift

17
推荐指数
1
解决办法
7425
查看次数

Xcode 4:框架本地化不起作用

我正在使用Xcode 4开发自己的框架,我在两个示例应用程序(一个控制台和Mac OS X Cocoa应用程序)中使用它.

我正在尝试向框架添加本地化,​​所以我创建了两个版本的Localizable.strings文件(en和fr版本),但每次我尝试从示例应用程序打印本地化字符串时,我只会获得其技术名称.例如,在框架代码中包含以下行:

NSLog(NSLocalizedString(@"LOC_TEST", nil));
Run Code Online (Sandbox Code Playgroud)

我只"LOC_TEST"在输出中显示...

然而,本地化与Cocoa应用程序本身一起工作正常(意味着Cocoa应用程序的本地化字符串被正确显示).

本文之后,我尝试在框架的plist文件中添加本地化:

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>fr</string>
</array>
Run Code Online (Sandbox Code Playgroud)

但它没有改变任何东西......

我错过了什么?

xcode frameworks localization xcode4 ios-frameworks

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

Locale.current报告设备上的错误语言

我正在尝试在iOS应用中格式化货币值,并且正在使用设备上的当前“语言环境”设置来使用适当的货币格式。

在模拟器中,一切似乎运行良好:使用时currencyFormatter.locale = Locale.current,它将采用正确的语言环境设置并以正确的货币格式打印数字。

但是,在我的iPhone(使用法语和法语区域设置配置)上,我希望使用其他格式(例如:1 234,56€)。但这是行不通的,并且似乎使用了英语格式样式(例如:€1 234,56)。

实际上,如果我从设备上的应用程序中打印当前的语言环境,它不会fr_FR像我期望的那样返回:

NSLog(Locale.current.identifier)
>>> en_FR
Run Code Online (Sandbox Code Playgroud)

该地区不错,但语言却不好,尽管该设备上的iOS显然是法语。

有没有人对此有想法?

谢谢!

locale nsnumberformatter ios swift

7
推荐指数
4
解决办法
3645
查看次数

将Cloud Endpoints API放在单独的App Engine模块中

我正在开发App Engine应用程序并计划提供API.我想将此API与主站点分开,因此我尝试使用"模块"功能来分离这两个应用程序.主站点将是"默认"模块,API将位于"api"模块中.但是,我遇到了麻烦.

现在我的主应用程序的YAML文件是这样的:

application: my-app
module: default
runtime: python27
api_version: 1

...

handlers:
# Root handler
- url: /.*
  script: main.app
  secure: always

...
Run Code Online (Sandbox Code Playgroud)

和API模块YAML文件,如下所示:

application: my-app
module: api
runtime: python27
api_version: 1

handlers:
# Endpoints handler
- url: /_ah/spi/.*
  script: api_main.app
  secure: always

...
Run Code Online (Sandbox Code Playgroud)

在开发服务器上,应用程序在端口8000上提供,API在端口7998上提供.

使用此配置,我的API不起作用.每当我尝试使用localhost:7998/_ah/api/explorer访问它时,我都没有得到任何结果.如果我尝试手动运行API请求,则会收到以下错误:{"error": {"message": "BackendService.getApiConfigs Error"}}.

奇怪的是我在开发服务器日志中也看到以下几行:

INFO     2014-06-15 18:00:32,368 module.py:639] default: "POST /_ah/spi/BackendService.getApiConfigs HTTP/1.1" 500 -
INFO     2014-06-15 18:00:32,368 module.py:639] api: "GET /_ah/api/my-app/v1/events HTTP/1.1" 500 60
Run Code Online (Sandbox Code Playgroud)

似乎API模块正在尝试将数据POST到默认模块(如第一行日志中所示).

现在,我发现的唯一解决方法是/_ah/spi/.*在默认的YAML文件中添加相同的处理程序,但在这种情况下,主应用程序和API之间的分离无效.

有人能告诉我云端点是否支持我想要实现的配置?非常感谢你!

google-app-engine google-cloud-endpoints

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

Facebook API的fb:注册时未连接到Facebook时返回"无效'client_id'"

我正在尝试将Facebook的注册工具用于我的网站.我想允许Facebook用户无缝登录我的网站,但也允许非Facebook用户通过统一的用户界面创建帐户.

我正在使用<fb:registration>标签.如果我在到达页面时已经连接到Facebook,一切都按预期工作(表格预先填入我的Facebook帐户的信息).但如果我没有连接到Facebook,则会显示以下错误:Invalid 'client_id'..

我究竟做错了什么?

非常感谢您的帮助.

您将在下面找到从服务器呈现的HTML代码:

<!doctype html>
<html xmlns:fb='http://www.facebook.com/2008/fbml'>
<head id='head'>
<title>MyWebSite - Signup</title>
<link rel='stylesheet' type='text/css' href='/client/Core.css'/>
<script language='JavaScript' type='text/javascript' src='/client/jQuery.js'></script>
<script type='text/javascript'>
function initialize() {
 $.getScript('client/Core.js');
 $.getScript(document.location.protocol + '//connect.facebook.net/en_US/all.js');
}

window.fbAsyncInit = function() {
 FB.init({
  appId   : 123456789, // replaced here by my App ID
  session : {},
  status  : true,
  cookie  : true,
  xfbml   : true
 });
 FB.Event.subscribe('auth.login', function() {
  window.location.href = 'DoLogin';
 });
};
</script>
</head>
<body onload='initialize();'>
<span id='fb-root'></span>
<fb:registration …
Run Code Online (Sandbox Code Playgroud)

facebook registration fbml facebook-fbml

5
推荐指数
1
解决办法
1万
查看次数

在PostGIS中使用通用的GEOGRAPHY列

在PostgreSQL 9 + PostGIS 1.5中,有没有办法创建"通用"GEOGRAPHY列?我指的是一个接受POINT以及POLYGON,LINESTRING等的专栏.到目前为止,我只在互联网上看过像GEOGRAPHY(POINT,4326)这样的专栏.

如果那是不可能的,那么你将如何设计(从数据库的角度来看)一个链接到随机地理对象(点,多边形,等等)的实体?我应该为每种我想支持的地理对象创建3个,4个,5个不同的表吗?(1个POINT对象表,1个POLYGON对象表等)?

提前致谢.

罗曼

postgresql geography postgis

4
推荐指数
1
解决办法
1982
查看次数

Swift iOS谷歌地图,协调路径

我正在尝试在我的应用程序中创建一个函数,该函数将引导用户使用我创建的标记.这是我正在使用的代码,它运行良好,它获取用户当前位置并在地图上显示它.但是如何获得标记的指示?

任何芒果都会有所帮助

class Karta: UIViewController, CLLocationManagerDelegate {
    @IBOutlet var mapView: GMSMapView!

    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        //allow app to track user
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

        //set out a marker on the map
        var marker = GMSMarker()
        marker.position = CLLocationCoordinate2DMake(56.675907, 12.858798)
        marker.appearAnimation = kGMSMarkerAnimationPop
        marker.icon = UIImage(named: "flag_icon")
        marker.map = mapView
     }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "Types Segue" {
            let navigationController = segue.destinationViewController as UINavigationController
        }
    }

    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus …
Run Code Online (Sandbox Code Playgroud)

directions google-maps-sdk-ios swift

3
推荐指数
3
解决办法
3万
查看次数

在 ios 通用设备上构建失败,但对于模拟器来说还可以

我已经从 codecanyon 下载了一个应用程序模板。

当我在模拟器上运行时,它运行良好。但是当我尝试在真实设备或 iOS 通用设备上构建时,它失败并显示以下错误:

> duplicate symbol l123 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFAppLinkReturnToRefererView.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFTask.o)
>     duplicate symbol l028 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFTaskCompletionSource.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFMeasurementEvent.o)
>     duplicate symbol l029 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFTaskCompletionSource.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFExecutor.o)
>     duplicate symbol l152 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/GoogleSignIn.framework/GoogleSignIn(GIDAuthentication.o)
>     duplicate symbol l153 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/GoogleSignIn.framework/GoogleSignIn(GIDAuthentication.o)
>     duplicate symbol l154 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/GoogleSignIn.framework/GoogleSignIn(GIDAuthentication.o)
>     duplicate symbol l155 in:
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/Bolts.framework/Bolts(BFWebViewAppLinkResolver.o)
>         /Users/sagar/Downloads/123/FoodDelivery/FoodDelivery/Resources/Frameworks/GoogleSignIn.framework/GoogleSignIn(GIDAuthentication.o)
>     .....
Run Code Online (Sandbox Code Playgroud)

ld:架构 arm64 clang 的 91 个重复符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) …

xcode objective-c ios

3
推荐指数
1
解决办法
1706
查看次数

调用协议扩展初始化程序

我正在尝试构建一组共享通用初始化代码的类。除了继承之外,我认为协议是可行的方法。虽然协议和协议扩展对我来说可以使用实例和静态方法,但我在使其与初始值设定项一起使用时遇到了一些麻烦。

假设我们有这个协议:

protocol CloudServiceWrapper {

    static var isConfigured: Bool { get }

    init()

    func initialize()

}
Run Code Online (Sandbox Code Playgroud)

现在假设我们要在协议扩展中添加isConfigured和的默认实现:init()

extension CloudServiceWrapper {

    static var isConfigured: Bool {
        get {
            return true
        }
    }

    init() {
        print("Initializing generic CloudServiceWrapper")
        self.init()
        if Self.isConfigured {
            initialize()
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

最后,让我们有一个类实现此协议并尝试从其默认实现中受益:

class OneDriveWrapper: CloudServiceWrapper {

    required init() {
        // CloudServiceWrapper() // error: protocol type 'CloudServiceWrapper' cannot be instantiated
        // self = CloudServiceWrapper.init() // error: cannot assign to value: 'self' is immutable
        // super.init() …
Run Code Online (Sandbox Code Playgroud)

ios swift swift-protocols protocol-extension

3
推荐指数
1
解决办法
2608
查看次数

重复的StructuredProperty中的新实体存储为_BaseValue

我有一个HUser模型(源自谷歌的User类),它反过来包含0到n个社交帐户实例.这些帐户可以引用Facebook,Twitter或LinkedIn帐户.我已经构建了一个Account模型,并StructuredProperty在我的User模型中定义了一个repeated=True,如下所示:

class Account(ndb.Expando):
    account_type = ndb.StringProperty(required=True, choices=['fb', 'tw', 'li'])
    account_id = ndb.StringProperty()
    access_token = ndb.StringProperty()
    ...

class HUser(User):
    email = ndb.StringProperty(required=True, validator=validate_email)
    created = ndb.DateTimeProperty(auto_now_add=True)
    accounts = ndb.StructuredProperty(Account, repeated=True)
Run Code Online (Sandbox Code Playgroud)

如果我只向我的用户添加Facebook或LinkedIn帐户,一切都按预期工作.但奇怪的是,每当我添加一个Twitter帐户时,我添加到同一个用户的所有后续帐户都存储为_BaseValue(Account()),而不是Account()直接存储.因此,在我尝试获取帐户的页面中,我通常会遇到以下错误:

AttributeError:'_ BaseWalue'对象没有属性'account_type'

我已经读过这些_BaseValue转换是Google的ndb源代码中的一个错误,但我怎么能摆脱它呢?目前我正在使用这个糟糕的解决方法来绕过异常:

if type(account) == _BaseValue:
    account = account.b_val
    logging.warn("WARN: %s account %s was of type _BaseValue..." % (account.account_type, account.account_id))
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

python google-app-engine app-engine-ndb google-cloud-datastore

2
推荐指数
1
解决办法
661
查看次数